2013-06-03 29 views
0

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

回答

2

为了区分这些行,添加另一列:

dataset$rank <- rep(1:1000, each=30) 

对于任何更详细的,在这个问题详细一点的是秩序。

+0

+1 - 虽然我不会称之为“排名”,更像是一个“id”。我同意我们需要更多的细节,以说明OP称之为“等级”。 – flodel

+0

感谢您的输入。这里有更多的细节。我有一个三列表mydataset。它是30,000行的数据集。但是,每隔30行,我都会更换样品。我想在V3列中对每个样本mydataset $ V3进行排序(不排序)它们的值,并将该排名放入新列mydataset $ V4中。这意味着我想对每排30行执行排名功能。我想作为一个forloop这将排名第1-30行退出循环,然后在接下来的30(行31-60)执行相同的功能。这是否足够的信息?你还想知道什么? – user2449619

1

的样本数据:

n <- 3000 
df <- data.frame(V1 = runif(n), V2 = runif(n), V3 = runif(n)) 

如何添加一个计算rankV3每30行一列:

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)}) 

在这第二个建议中,我从transformwithin,因为前者不允许根据其他新定义的变量(ID)定义变量(rank)。

+0

复杂但工作很好!谢谢! – user2449619

+0

@ user2449619,然后请考虑接受我的答案。谢谢。 – flodel