将数据帧拆分为相同数量的组,不同的行大小

时间:2013-07-03 15:58:36

标签: r dataframe grouping

我想拆分一个包含许多变量的数据框,我想按某个变量进行分组,其中该变量的行数不同。这是可重复的例子:

y = data.frame(num = 1:4, sort_var = rep(c('hhh', 'jjj','iii','aaa'),4))
x = data.frame(num = 5:7, sort_var = rep(c('ddd', 'ccc','bbb'),2))

xy = rbind(x,y)
xy = xy[order(xy$num),]

我想从num列中创建组,其中每个组都是通过分组num 1:2,3:4,5:6和7来制作的。

感谢。

3 个答案:

答案 0 :(得分:1)

> split(xy,(xy$num-1)%/%2)
$`0`
   num sort_var
7    1      hhh
11   1      hhh
15   1      hhh
19   1      hhh
8    2      jjj
12   2      jjj
16   2      jjj
20   2      jjj

$`1`
   num sort_var
9    3      iii
13   3      iii
17   3      iii
21   3      iii
10   4      aaa
14   4      aaa
18   4      aaa
22   4      aaa

$`2`
  num sort_var
1   5      ddd
4   5      ddd
2   6      ccc
5   6      ccc

$`3`
  num sort_var
3   7      bbb
6   7      bbb

答案 1 :(得分:0)

使用此:

by(xy, as.integer((xy$num+1)/2), I)

请注意,我已使用函数I来处理每个组,这只是复制结果。但你可以(应该)改变它。

答案 2 :(得分:0)

library(car)

sp <- recode(xy$num, "1:2=1; 3:4=2; 5:6=3; 7=4")
split(xy, sp)

$`1`
   num sort_var
7    1      hhh
11   1      hhh
15   1      hhh
19   1      hhh
8    2      jjj
12   2      jjj
16   2      jjj
20   2      jjj

$`2`
   num sort_var
9    3      iii
13   3      iii
17   3      iii
21   3      iii
10   4      aaa
14   4      aaa
18   4      aaa
22   4      aaa

$`3`
  num sort_var
1   5      ddd
4   5      ddd
2   6      ccc
5   6      ccc

$`4`
  num sort_var
3   7      bbb
6   7      bbb