38
data = c(1,2,3,4)
names = c("foo", "bar", "baz", "yak")
d = data.frame(data, row.names=names)

这将返回:

    data
foo    1
bar    2
baz    3
yak    4

现在,我想按列对这个数据框进行排序,而不会丢失附加的行名。所以,我的结果是:

    data
yak    4
baz    3
bar    2
foo    1

我已经尝试过以下方法:

  • d[order(-d$data),],这当然只给了我一维列表。

  • arrange(d, desc(data))plyr包中删除行名。

  • 用 找出顺序o = order(-d$data),然后用 重建框架

    data.frame(d[o,], row.names=rownames(d)[o])
    

    …这仍然给我留下了错误的列名。

有什么理智的方法可以做到这一点吗?

4

1 回答 1

44

您的第一次尝试很接近,只是忘记了使用drop = FALSE

> d[order(-d$data), , drop = FALSE]
    data
yak    4
baz    3
bar    2
foo    1
于 2012-10-31T11:08:19.803 回答