Search code examples
rsortingvectorcomplex-numbers

sorting a complex vector by imaginary part in R


roots <- polyroot(c(5, 4, 3, 2, 1))

I want to sort the roots by ascending order of the imaginary part. By default the sort function sorts it by the increasing order of the real part. I've read the document and I still do not know how to adjust the arguments or write the command. Can anybody help?


Solution

  • Use Im function to extract the imaginary part and sort it.

    roots <- polyroot(c(5, 4, 3, 2, 1))
    #[1]  0.287815+1.416093i -1.287815+0.857897i -1.287815-0.857897i
    #[4]  0.287815-1.416093i
    
    roots[order(Im(roots))]
    #[1]  0.287815-1.416093i -1.287815-0.857897i -1.287815+0.857897i
    #[4]  0.287815+1.416093i