0

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

4

2 回答 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 回答