我是R的新手并且有一个我无法弄清楚的相对简单的问题。我有一个大约30,000行和3列的数据集。每30行是一个样本,但样本没有标识符。我想对每个样本的每一行进行排名(即我需要将每个子集排在30--1:30,然后是31:60然后是61:90,依此类推到30000)。我想将输出cbind到原始数据表。有什么简单的方法来完成这项任务吗谢谢!
答案 0 :(得分:2)
要分隔这些行,请添加另一列:
dataset$rank <- rep(1:1000, each=30)
对于更详细的内容,问题中的一些细节将是有序的。
答案 1 :(得分: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
)。