【问题标题】:Adding row for missing value in data.table在 data.table 中为缺失值添加行
【发布时间】:2015-05-29 12:44:54
【问题描述】:

我的问题在某种程度上与Fastest way to add rows for missing values in a data.frame? 相关,但我认为有点强硬。而且我不知道如何使这个解决方案适应我的问题。

这是我的 data.table 的样子:

                   ida       idb         value     date
   1:               A         2          26600  2004-12-31
   2:               A         3          19600  2005-03-31
   3:               B         3          18200  2005-06-30
   4:               B         4          1230   2005-09-30
   5:               C         2          8700   2005-12-31

不同之处在于每个“ida”都有自己的日期,并且每个日期至少有一行出现“ida”,但不一定适用于所有“idb”。我想插入每个缺失的 ('ida','idb') 对,并带有相应的日期和 0 作为值。

此外,日期没有周期性。

你会怎么做?

期望的输出:

                   ida       idb         value     date
   1:               A         2          26600  2004-12-31
   1:               A         2            0    2005-03-31
   2:               A         3          19600  2005-03-31
   2:               A         3            0    2004-12-31
   3:               B         3          18200  2005-06-30
   4:               B         3            0    2005-09-30
   5:               B         4          1230   2005-09-30
   4:               B         4            0    2005-06-30
   6:               C         2          8700   2005-12-31

顺序无关紧要。每个缺失的日期都用 0 值填充。

【问题讨论】:

  • 那么这个示例输入的期望输出是什么?
  • 你的例子中是否包括一对失踪的夫妇?
  • seqrange(date)一起使用,然后将日期向量变成一列data.table,在date字段的两个DT上设置key,加入两者,用0填充NA。如果你管理要解决您的问题,请不要忘记将代码放在答案中并标记为已接受。
  • 我添加了所需的输出,对此感到抱歉。 @JanGorecki:我不能使用 seq 因为日期没有周期性。

标签: r data.table


【解决方案1】:

您只需通过每个ida 执行与链接问题中相同的操作:

setkey(dt, idb, date)

dt[, .SD[CJ(unique(idb), unique(date))], by = ida][is.na(value), value := 0][]
#   ida idb value       date
#1:   A   2 26600 2004-12-31
#2:   A   2     0 2005-03-31
#3:   A   3     0 2004-12-31
#4:   A   3 19600 2005-03-31
#5:   C   2  8700 2005-12-31
#6:   B   3 18200 2005-06-30
#7:   B   3     0 2005-09-30
#8:   B   4     0 2005-06-30
#9:   B   4  1230 2005-09-30

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-08
    • 2018-06-19
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多