如何对只有一列的数据框进行排序,而不会丢失rownames? [英] How can I sort a data.frame with only one column, without losing rownames?

查看:364
本文介绍了如何对只有一列的数据框进行排序,而不会丢失rownames?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ b b b b b b b b b b b b b b b b b b b b b b b b b b b $ bd = 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])

    ...仍然给我错误的列名。




有没有一个理智的方法这样做?

解决方案

您第一次尝试关闭,只是忘了使用 drop = FALSE

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


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?

解决方案

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

这篇关于如何对只有一列的数据框进行排序,而不会丢失rownames?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆