Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对只有一列的data.frame进行排序而不丢失行名?_R_Sorting_Dataframe - Fatal编程技术网

如何对只有一列的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),]
    ,这当然只给出了一维列表

  • plyr
    包中排列(d,desc(data))
    ,该包将删除行名称

  • 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