r - 使用 dplyr 分组后找到丢失的月份

标签 r dplyr missing-data

我有一个包含两列的数据框,我将其分组为 dplyr ,一列月份(作为数字,例如 1 到 12),以及几列带有统计数据的列(值不重要)。一个例子:

ID_1   ID_2   month  st1    st2
1      1      1      0.5    0.2
1      1      2      0.7    0.9
1      1      3      1.1    1.7
1      1      4      2.6    0.8
1      1      5      1.8    1.3
1      1      6      2.1    2.2
1      1      7      0.5    0.2
1      1      8      0.7    0.9
1      1      9      1.1    1.7
1      1      10     2.6    0.8
1      1      11     1.8    1.3
1      1      12     2.1    2.2
1      2      1      0.5    0.2
1      2      2      0.7    0.9
1      2      3      1.1    1.7
1      2      4      2.6    0.8
1      2      5      1.8    1.3
1      2      6      2.1    2.2
1      2      7      0.5    0.2
1      2      9      1.1    1.7
1      2      10     2.6    0.8
1      2      11     1.8    1.3
1      2      12     2.1    2.2

对于第二个分组( ID_1 = 1ID_2 = 2 ),数据中缺少一个月( month = 8 )。有没有办法我可以找到这个月并插入一行正确的 ID_1ID_2值,缺失 month值,和 NA其余列的值?我一直在玩这个使用 dplyr功能,似乎无法弄清楚,也许甚至还有一个非dplyr解决方案也在那里。

PS:如果有帮助,ID_1的每个唯一分组和 ID_2将有不超过 1 个月的失踪。

最佳答案

展开网格以制作所有组组合,然后合并:

# make reference with all needed rows
ref <- data.frame(expand.grid(unique(df1$ID_1),
                              unique(df1$ID_2),
                              1:12))
colnames(ref) <- colnames(df1)[1:3]

# them merge with all TRUE
res <- merge(df1, ref, all = TRUE)

# to check output, show only month = 8
res[ res$month == 8, ]
#    ID_1 ID_2 month st1 st2
# 8     1    1     8 0.7 0.9
# 20    1    2     8  NA  NA

关于r - 使用 dplyr 分组后找到丢失的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39520558/

相关文章:

包含 NA 的字段上的范围

R lag/lead - 如何忽略现有行之前和之后的行

statistics - 将缺失值重新编码为条件均值

c - C : Consult SEXP PROTECT Stack Height 中的 R 扩展

r - 在data.table中查找*所有*重复记录(不是全而是一个)

r - 用相同类型的NA填充列的函数

r - 使用 dplyr 和 broom 在训练和测试集上计算 kmeans

r - 使用 R 插入缺失数据的值和另一个数据框中的值

r - 加速 R 中 sapply 调用中使用的函数

将值按行分配给多列