我已经看过很多关于如何在帧中添加排名列的帖子,但没有关于如何使用排名过程中的数据进行变量排名的帖子。我想,哎呀,为什么不从变换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"])
答案 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