【问题标题】:Splitting dataframe into equal number of groups, differing row sizes将数据帧分成相等数量的组,不同的行大小
【发布时间】:2013-07-03 15:58:35
【问题描述】:

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

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 分组。

谢谢。

【问题讨论】:

    标签: r dataframe grouping


    【解决方案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
    

    【讨论】:

    • 你已经超越了自己。回复这么快,我什至无法接受!
    【解决方案2】:

    使用这个:

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

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

    【讨论】:

    • 改用split。我也不认为as.integer 是必要的。
    • as.integer 是必需的。使用by 允许一次处理一个块,并且只保存结果。 split 返回带有整个数据框的 list
    • OP 只是要求拆分数据。
    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2018-07-12
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多