【问题标题】:How to add rows so that each group has equal number of rows?如何添加行以使每个组具有相等的行数?
【发布时间】:2023-02-01 21:34:08
【问题描述】:

我有一个数据框,每组的行数不相等,请参见下面示例中的df。我想在所有其他列中添加包含组名和 NA 的行,以便每个组的行数与 df.desired 中的相同。这些行应添加到相应组的最后一行之后。

例子:

df = data.frame(group = c("A","A","A","A","B","B","B","C","C"),  
                         col1 = c(1, 1, 1, 1, 2, 2, 2, 3, 3),
                         col2 = c(12, 13, 14, 15, 21, 22, 23, 31, 32))
> df
  group col1 col2
1     A    1   12
2     A    1   13
3     A    1   14
4     A    1   15
5     B    2   21
6     B    2   22
7     B    2   23
8     C    3   31
9     C    3   32
df.desired = data.frame(group = c("A","A","A","A","B","B","B","B","C","C","C","C"),  
                         col1 = c(1, 1, 1, 1, 2, 2, 2, NA, 3, 3, NA, NA),
                         col2 = c(12, 13, 14, 15, 21, 22, 23, NA, 31, 32, NA, NA))
> df.desired
   group col1 col2
1      A    1   12
2      A    1   13
3      A    1   14
4      A    1   15
5      B    2   21
6      B    2   22
7      B    2   23
8      B   NA   NA
9      C    3   31
10     C    3   32
11     C   NA   NA
12     C   NA   NA

我知道如何使用循环来执行此操作,但这会非常慢,如果可能的话,我更愿意使用dplyr。有人有什么想法吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这个怎么样:

    library(dplyr)
    df = data.frame(group = c("A","A","A","A","B","B","B","C","C"),  
                   col1 = c(1, 1, 1, 1, 2, 2, 2, 3, 3),
                   col2 = c(12, 13, 14, 15, 21, 22, 23, 31, 32))
    maxgp <- max(table(df$group))
    
    df %>% 
      group_by(group) %>% 
      summarise(across(everything(), ~c(.x, rep(NA, maxgp-n()))))
    #> `summarise()` has grouped output by 'group'. You can override using the
    #> `.groups` argument.
    #> # A tibble: 12 × 3
    #> # Groups:   group [3]
    #>    group  col1  col2
    #>    <chr> <dbl> <dbl>
    #>  1 A         1    12
    #>  2 A         1    13
    #>  3 A         1    14
    #>  4 A         1    15
    #>  5 B         2    21
    #>  6 B         2    22
    #>  7 B         2    23
    #>  8 B        NA    NA
    #>  9 C         3    31
    #> 10 C         3    32
    #> 11 C        NA    NA
    #> 12 C        NA    NA
    

    reprex package (v2.0.1) 创建于 2023-02-01

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2019-02-16
      • 2021-09-16
      • 2016-05-11
      • 2020-04-29
      相关资源
      最近更新 更多