排列数据集的子集

时间:2013-06-03 22:11:41

标签: r rank

我是R的新手并且有一个我无法弄清楚的相对简单的问题。我有一个大约30,000行和3列的数据集。每30行是一个样本,但样本没有标识符。我想对每个样本的每一行进行排名(即我需要将每个子集排在30--1:30,然后是31:60然后是61:90,依此类推到30000)。我想将输出cbind到原始数据表。有什么简单的方法来完成这项任务吗谢谢!

2 个答案:

答案 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,因为前者不允许根据其他新定义的变量定义变量(rankID )。