如何在R中的数据帧中对单元格进行排序而不将其添加到数据帧中

时间:2014-04-05 15:12:28

标签: r

我已经看过很多关于如何在帧中添加排名列的帖子,但没有关于如何使用排名过程中的数据进行变量排名的帖子。我想,哎呀,为什么不从变换data.frame函数中取出排名函数并使用它:

transform(df, 
          year.rank = ave(count, year, 
                          FUN = function(x) rank(-x, ties.method = "first")))

Buuuut试图计算一年内的事件,因此对我来说并不适用。我只想从数据框中的单元格中获取信息并对它们进行排名。我正在尝试进行Kruskal-Wallis测试,但是使用排列来找到p值(kruskal.test()不会这样做。)

我尝试在我的数据框中使用rank(),但我明白了:

Week2_NoAnti   Week2_NaN3    Week2_TCS   Week2_EDTA         <NA>         <NA> 
       1            4            6           10           11           12 
    <NA>         <NA>         <NA>         <NA>         <NA>         <NA> 
       2            3            7            5            8            9 

这不太有帮助。数据框如下所示:

 Week2_NoAnti Week2_NaN3 Week2_TCS Week2_EDTA
1       0.0000     0.7665    0.0756     0.1060
2       0.0938     0.9222    0.0806     0.1289
3       0.1243     1.0109    0.1283     0.1882

如前所述,我想对细胞进行排名。我还需要稍后知道它们来自哪个列,这样我就可以平均每列得到的等级,所以我不能将它们全部放入向量中并对向量进行排名。

感谢您的帮助!

编辑:实现更好的方法来做数据框可能是有一列有值,另一列有标签。目前难以使head()函数显示超过六个结果......,但这里显示的是:

       Groups agValues
1 Week2_NoAnti   0.0000
2 Week2_NoAnti   0.0938
3 Week2_NoAnti   0.1243
4   Week2_NaN3   0.7665
5   Week2_NaN3   0.9222
6   Week2_NaN3   1.0109

解决方案:

抱歉浪费你的时间!上述组织使其变得更加容易:

ranks = rank(agValues)
mean(ranks[Groups=="Week2_NoAnti"])

2 个答案:

答案 0 :(得分:2)

尝试

rankmat=matrix(rank(as.vector(yourmatrix)),dim(yourmatrix))

在这里,您将矩阵转换为矢量,然后取得等级并将矢量转换回正确尺寸的矩阵。

答案 1 :(得分:0)

对于您刚刚发布的已编辑数据框执行此操作

ranked.df <-df[order(df$agValues),] #decreasing = FALSE by default 
#and df is your data.frame