【问题标题】:Fill missing combinations in a dataframe填充数据框中缺失的组合
【发布时间】:2018-03-22 23:15:09
【问题描述】:

我的示例数据集:

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 的每个组合都填充为 0 的 VALUE1 和 VALUE2。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循环生成一个动态字符串,但我觉得有一种更简单的方法可以用几行代码来完成它。我想我想得太复杂了。有任何想法吗?提前谢谢你。

【问题讨论】:

  • 您的结果输出要么缺少类别值,要么区域与您的输出数据不同 - 对于组合,expand.grid() 可能会有所帮助。
  • 在基础 R 中,如前所述,在当前示例中,d 执行 dfNew &lt;- merge(df, expand.grid(df[1:2]), all=TRUE); df[is.na(df)] &lt;- 0

标签: r


【解决方案1】:

使用来自 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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-08-21
    • 2020-10-28
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2020-06-06
    相关资源
    最近更新 更多