如何对只有一列的data.frame进行排序而不丢失行名?
这将返回:如何对只有一列的data.frame进行排序而不丢失行名?,r,sorting,dataframe,R,Sorting,Dataframe,这将返回: 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 我已经尝试了以下方法: d[order(-d$data),],这当然只给出了一维列表 从plyr包中排列(d,desc(d
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
我已经尝试了以下方法:
,这当然只给出了一维列表d[order(-d$data),]
,该包将删除行名称从
包中排列(d,desc(data))plyr
- 用
找出顺序,然后用o=order(-d$data)
…这仍然让我使用了错误的列名data yak 4 baz 3 bar 2 foo 1
有什么明智的方法可以做到这一点吗?您的第一次尝试很接近,只是忘记了使用
drop=FALSE
:
data.frame(d[o,], row.names=rownames(d)[o])
啊,很有趣。我只是在阅读了这里的关键词“drop”之后才发现了这一点,这让我想到了降低维度是否是一个好主意。我会仔细阅读的。我想每个人都已经问过这个问题了。R神的共识是,这个默认值不是很好,但是如果不废除大多数现有代码,就无法更改它。将在Q中更正。当我使用此解决方案时,我过滤掉除一行以外的所有行。这是怎么发生的?
> d[order(-d$data), , drop = FALSE]
data
yak 4
baz 3
bar 2
foo 1