R 用零填充数据帧

R 用零填充数据帧,r,dataframe,dplyr,R,Dataframe,Dplyr,我有这样一个数据框: A B C a 1 3 a 2 5 a 4 3 b 1 2 b 2 6 ... 我想为a中的每个l和{1,2,3,4}中的每个I添加一行li0,这样就没有lik行了 对于这个例子,如果我考虑{1,2,3,4},结果将是 A B C a 1 3 a 2 5 a 3 0 a 4 3 b 1 2 b 2 6 b

我有这样一个数据框:

A    B    C
a    1    3
a    2    5
a    4    3
b    1    2
b    2    6
    ...
我想为a中的每个l和{1,2,3,4}中的每个I添加一行
li0
,这样就没有
lik
行了

对于这个例子,如果我考虑{1,2,3,4},结果将是

A    B    C
a    1    3
a    2    5
a    3    0
a    4    3
b    1    2
b    2    6
b    3    0
b    4    0
    ...
我觉得我可以使用一个包含
1234
的数据帧,并尝试完全加入,但我不知道如何管理它


如何获得此结果?

您可以使用
expand.grid
枚举列A和B的所有组合,然后使用
sigdiff
dplyr
中删除原始数据帧中已经存在的所有对,并添加一个零列

library(dplyr)

D <- read.table(header=TRUE, text = "
A    B    C
a    1    3
a    2    5
a    4    3
b    1    2
b    2    6
")

expand.grid(A=unique(D$A), B=1:4) %>%
  setdiff(D[,1:2]) %>%
  mutate(C=0) %>%
  bind_rows(D) %>%
  arrange(A, B)

#>   A B C
#> 1 a 1 3
#> 2 a 2 5
#> 3 a 3 0
#> 4 a 4 3
#> 5 b 1 2
#> 6 b 2 6
#> 7 b 3 0
#> 8 b 4 0
库(dplyr)
D%
setdiff(D[,1:2])%>%
变异(C=0)%>%
绑定_行(D)%>%
安排(A,B)
#>A、B、C
#>1A13
#>2 a 2 5
#>3 a 3 0
#>4 a 4 3
#>5 b 1 2
#>6B26
#>7B30
#>8 b 4 0

使用
完成

df %>% complete(B = full_seq(B, 1), A,fill=list(C=0))%>%arrange(A)
# A tibble: 8 x 3
      B     A     C
  <dbl> <chr> <dbl>
1     1     a     3
2     2     a     5
3     3     a     0
4     4     a     3
5     1     b     2
6     2     b     6
7     3     b     0
8     4     b     0
df%>%complete(B=full_seq(B,1),A,fill=list(C=0))%>%arrange(A)
#一个tibble:8x3
B A C
1A3
2 a 5
3 a 0
4 a 3
5 1 b 2
62B6
7 3 b 0
8 4 b 0

目前还不清楚您到底想实现什么目标。你能提供一个你想要的小例子输出吗?哦,对不起,我为我给出的例子添加了想要的结果