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