如何使用row.names属性在R中对我的数据帧的行进行排序?

时间:2013-11-30 02:20:41

标签: r dataframe random-forest

我创建了一个随机森林并预测了我的测试集的类,这些类在数据帧中幸福地生活:

row.names   class  
564028      1
275747      1
601137      0
922930      1
481988      1
...

在我执行各种操作之前,row.names属性告诉我哪一行是哪一行,这些操作在过程中扰乱了行的顺序。到目前为止一切都很好。

现在我想对我的预测的准确性有一个普遍的感觉。为此,我需要根据row.names属性获取此数据帧并按升序对其重新排序。通过这种方式,我可以逐行地将这些观察结果与我已经知道的标签进行比较。

请原谅我提出这样一个基本问题,但对于我的生活,我找不到关于如何完成这项微不足道任务的良好信息来源。

文档恳求我:

  

如果需要检索一组整数值的行名,请使用attr(x, "row.names")

但是除了NULL之外什么都没有。

我的问题是,如何在整个工作流程中使用row.names忠诚跟随我的数据框架的各种版本?这不是它的用途吗?

8 个答案:

答案 0 :(得分:22)

这些解决方案都不会真正起作用。它应该是:

df[ order(as.numeric(row.names(df))),] #assuming数据框名为df

因为R中的rowname是'character',当 as.numeric 部分缺失时,它会将数据排列为1,10,11 ......等等。

答案 1 :(得分:18)

这对我有用:

new_df <- df[ order(row.names(df)), ]

答案 2 :(得分:2)

为了完整性:

@ BondedDust的答案适用于rownames属性,但您的示例不使用rownames属性。您的问题中提供的输出表示使用名为&#34; row.names&#34;的列,这不是相同的事情(所有列在@BondedDust&#39的评论中)。 如果您希望按&#34; row.names&#34;排序,那么就是答案。您问题中给出的示例中的列(此处有另一个帖子,位于here)。这个答案假设您正在使用名为&#34; df&#34;的数据框,其中一列名为&#34; row.names&#34;:

ordered.df <- df[order(df$row.names),]   #this orders the df by the "row.names" column

或者,按照第一栏的顺序排序(如果你还在使用你的例子,同样的事情):

ordered.df <- df[order(df[,1]),]         #this orders the df by the first column

希望这有用!

答案 3 :(得分:1)

这将几乎自动完成,因为“[”函数将以任何可与rownames匹配的向量的词汇顺序显示():

df[ rownames(df) , ]

您可能认为有必要使用:

df[ order(rownames(df)) , ]

但那会给你1:100的1,10,100,12,13,......,2,20,21 ......的排序,因为“[”的参数被强制转换为字符。

答案 4 :(得分:0)

假设您的数据框名为'df',您可以创建一个新的有序数据框'ord.df',它将包含df的行名称以及以下一行代码中的值:

>ord.df<-cbind(rownames(df)[order(rownames(df))], df[order(rownames(df)),])

答案 5 :(得分:0)

new_df <- df[ order(row.names(df)), ]  

或类似的东西不会起作用。在此声明之后,new_df不再具有rowname。我想更好的解决方案是将列添加为rowname,按其排序,并将其设置为rowname

答案 6 :(得分:0)

如果您的数据框中只有一列,就像我的情况一样,您必须添加drop = F:

mobx  = require 'mobx'

state = mobx.observable
    items:['a','b']

compute = (key,fn)->
    obj = {}
    obj[key] = mobx.computed fn.bind state
    mobx.extendObservable state, obj

compute 'num', ->
    @items.length

mobx.autorun ->
    console.log "items = #{state.items}"

mobx.autorun ->
    console.log "num = #{state.num}"

state.items.push 'c'

答案 7 :(得分:0)

您可以使用以下命令简单地对df进行排序:

df <- df[sort(rownames(df)),]

然后做你想做的事!