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 the plyr
package, which drops the row names.
Find out the order with o = order(-d$data)
, then reconstruct the frame with
data.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?
To sort a data frame in R, use the order( ) function. By default, sorting is ASCENDING.
To change the row order in an R data frame, we can use single square brackets and provide the row order at first place.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With