我的数据是这样的(它是按列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