How can I sort a data.frame with only one column, without losing rownames?
You were close with your first attempt, just forgot about using drop = FALSE
:
> d[order(-d$data), , drop = FALSE]
data
yak 4
baz 3
bar 2
foo 1
slhck
Video quality guy and researcher, PhD student in computer science. Founder/CEO of AVEQ. I offer personal consulting and help with video encoding, especially with FFmpeg. Send a mail to werner.robitza at gmail.com. More info on my website.
Updated on November 01, 2020Comments
-
slhck over 3 years
data = c(1,2,3,4) names = c("foo", "bar", "baz", "yak") d = data.frame(data, row.names=names)
This returns:
data foo 1 bar 2 baz 3 yak 4
Now, I'd like to sort this dataframe by the column, without losing the row names attached. So, my result would be:
data yak 4 baz 3 bar 2 foo 1
I've already tried the following:
d[order(-d$data),]
, which of course only gives me the one-dimensional list.arrange(d, desc(data))
from theplyr
package, which drops the row names.Find out the order with
o = order(-d$data)
, then reconstruct the frame withdata.frame(d[o,], row.names=rownames(d)[o])
… which still leaves me with the wrong column name.
Is there any sane way to do this?
-
slhck over 11 yearsAh, interesting. I somehow didn't find out about this only after reading the keyword "drop" here, which now makes me think whether R dropping dimensions is a good idea or not. I'll read up on that.
-
Dieter Menne over 11 yearsI think everyone has already asked this question. The consensus of the R gods was that this default was not so good, but that it cannot be changed without obsoleting most existing code. Will be corrected in Q.
-
Kory almost 9 yearsWhen I use this solution I filter out all of my rows but one. How did this happen?