我是 R 新手,有一个我无法弄清楚的相对简单的问题。我有一个大约 30,000 行和 3 列的数据集。每 30 行是一个样本,但样本没有标识符。我想对单个样本的每一行进行排名(即我需要对 30--1:30、31:60、61:90 的每个子集进行排名,以此类推到 30000)。我想将输出绑定到原始数据表。有什么简单的方法可以完成这项任务?谢谢!
问问题
933 次
2 回答
2
要分隔这些行,请添加另一列:
dataset$rank <- rep(1:1000, each=30)
对于更详细的内容,问题中的一些细节将是有序的。
于 2013-06-03T22:58:19.487 回答
1
样本数据:
n <- 3000
df <- data.frame(V1 = runif(n), V2 = runif(n), V3 = runif(n))
如何添加每 30 行计算rank
的列:V3
df <- transform(df, rank = ave(V3, (seq_along(V3) - 1) %/% 30, FUN = rank))
如果它有助于理解,您也可以将其分解一下:
df <- within(df, {ID = 1 + (seq_along(V3) - 1) %/% 30
rank = ave(V3, ID, FUN = rank)})
在第二个建议中,我从 切换transform
到 ,within
因为前者不允许rank
根据其他新定义的变量 ( ) 定义变量 ( ID
)。
于 2013-06-04T00:07:43.037 回答