我的示例数据集:
df <- data.frame(
REGION = c("REGION A", "REGION A", "REGION B"),
CATEGORY = c("A", "B", "B"),
VALUE1 = c(2,3,4),
VALUE2 = c(1,2,3)
)
结果:
REGION CATEGORY VALUE1 VALUE2
1 REGION A A 2 1
2 REGION A B 3 2
3 REGION B B 4 3
现在我想要在数据集中未考虑的REGION和CATEGORY的每个组合都填充VALUE1和VALUE2为0.此df
的结果应为:
REGION CATEGORY VALUE1 VALUE2
1 REGION A A 2 1
2 REGION A B 3 2
3 REGION B A 4 3
4 REGION B B 0 0
我已经为它编写了一个很大的函数,它生成一个带有for循环的动态字符串,但我觉得有一个更简单的方法只用几行代码就可以了。我想我觉得太复杂了。有任何想法吗?提前谢谢。
答案 0 :(得分:4)
使用来自tidyr的complete
:
library(tidyr)
as.data.frame(complete(df,REGION,CATEGORY,fill=list(VALUE1=0,VALUE2=0)))
输出:
REGION CATEGORY VALUE1 VALUE2
1 REGION A A 2 1
2 REGION A B 3 2
3 REGION B A 0 0
4 REGION B B 4 3
如果有很多变数,您也可以as.data.frame(complete(df,REGION,CATEGORY))
然后替换NA
。
希望这有帮助!