How can I sort a data.frame with only one column, without losing rownames?

dataframe, r, sorting

Solution

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

Problem

``` 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?

Original source