将行添加到 tibble 数据框,以便每组具有相同数量的观察

Add rows to a tibble dataframe so that each group has the same number of observation

我的数据是这样的(按列group分组)。

df = data.frame(id=c('1','2','3','1','2','1'),group=c('a','a','a','b','b','c'),
                  value1=c(1,2,3,4,5,6),value2=c(1,2,3,4,5,6),stringsAsFactors=FALSE)
df = group_by(df,group)
df

# A tibble: 6 x 4
# Groups:   group [3]
  id    group value1 value2
  <chr> <chr>  <dbl>  <dbl>
1 1     a          1      1
2 2     a          2      2
3 3     a          3      3
4 1     b          4      4
5 2     b          5      5
6 1     c          6      6

id可以取1,2,3中的值。我想为每个 group 做的,我想为每个 id 排一行。现在对于 b 组,我只有 id 1 和 2 的行;对于 c 组,我只有 1 行 id 1。我理想的数据框看起来像这样

# A tibble: 9 x 4
# Groups:   group [3]
  id    group value1 value2
  <chr> <chr>  <dbl>  <dbl>
1 1     a          1      1
2 2     a          2      2
3 3     a          3      3
4 1     b          4      4
5 2     b          5      5
6 3     b         NA     NA
7 1     c          6      6
8 2     c         NA     NA
9 3     c         NA     NA

有什么有效的方法吗?

我们可以用complete展开数据然后arrange

library(dplyr)
library(tidyr)
df %>% 
  ungroup %>%
  complete(id, group) %>%
    arrange(group)

-输出

# A tibble: 9 x 4
#  id    group value1 value2
#  <chr> <chr>  <dbl>  <dbl>
#1 1     a          1      1
#2 2     a          2      2
#3 3     a          3      3
#4 1     b          4      4
#5 2     b          5      5
#6 3     b         NA     NA
#7 1     c          6      6
#8 2     c         NA     NA
#9 3     c         NA     NA