2014-10-08 88 views
0

我有一个很大的数据框,我想在其中以五个组为单位任意分组所有行。如何在r数据框中以编程方式进行分组变量

我的数据框的一部分可能看起来像像这样:

structure(list(index = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20, 21, 22), group = c(1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), .Names = c("index", 
"group"), row.names = c(NA, 22L), class = "data.frame") 

    index group 
1  1  1 
2  2  1 
3  3  1 
4  4  1 
5  5  1 
6  6  1 
7  7  1 
8  8  1 
9  9  1 
10 10  1 
11 11  1 
12 12  1 
13 13  1 
14 14  1 
15 15  1 
16 16  1 
17 17  1 
18 18  1 
19 19  1 
20 20  1 
21 21  1 
22 22  1 

但我需要的是这样的:

index group 
1  1  1 
2  2  1 
3  3  1 
4  4  1 
5  5  1 
6  6  2 
7  7  2 
8  8  2 
9  9  2 
10 10  2 
11 11  3 
12 12  3 
13 13  3 
14 14  3 
15 15  3 
16 16  4 
17 17  4 
18 18  4 
19 19  4 
20 20  4 
21 21  5 
22 22  5 

我试图用一个for循环,但结果却是重复数到5。这不是我打算的。前五行必须出现在第一组中,而不是第一排在五个之后。

有没有人有关如何解决这个问题的想法?最受欢迎的!

回答

1

你可以试试:

df$group<-((1:nrow(df)-1) %/% 5)+1 
+0

谢谢!这一个工作马上 – rdatasculptor 2014-10-08 10:51:04

1

比方说,你的数据帧d。然后,你需要

d$group <- rep(1:(nrow(d)/5), each = 5) 

(当然排在d数必须整除5也没有意义。如果不是,你想最后一个条目重复少于5次,尝试rep(1:ceiling(nrow(d)/5), each = 5, length.out = nrow(d))

+0

感谢您的答案。你是对的,我想最后一次重复少于5次。您使用ceiling()的解决方案不起作用,或者至少我无法使其工作。 – rdatasculptor 2014-10-08 10:50:49

+1

哦,是的,我忘了指定输出的长度(否则它会给出比'd'行多的条目) – konvas 2014-10-08 10:57:06

相关问题