【问题标题】:How can I sort a data.frame with only one column, without losing rownames?如何在不丢失行名的情况下对只有一列的 data.frame 进行排序?
【发布时间】:2012-10-20 19:44:53
【问题描述】:
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])
    

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

有什么健全的方法可以做到这一点吗?

【问题讨论】:

    标签: r sorting dataframe


    【解决方案1】:

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

    > d[order(-d$data), , drop = FALSE]
        data
    yak    4
    baz    3
    bar    2
    foo    1
    

    【讨论】:

    • 啊,有趣。不知何故,我只是在阅读了这里的关键字“drop”之后才发现这一点,这让我现在想到 R 降低尺寸是否是一个好主意。我会仔细阅读的。
    • 我想大家已经问过这个问题了。 R 大神们的共识是,这个默认值不是很好,但是如果不废弃大多数现有代码就无法更改它。将在 Q 中更正。
    • 当我使用这个解决方案时,我过滤掉了我的所有行,但只有一个。这是怎么发生的?
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2020-11-12
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多