根据先前数据将数据添加到数据表

时间:2017-12-18 19:32:42

标签: r data.table

我的第一篇文章,希望我做得对。

我有一张表格如下:

Year    Day Amount
1990    1   200
1990    363 2058
1993    1   10
1993    71  564
1993    360 931

我想在此表中添加数据行,以便在最大日期和日期之间存在所有数字的行条目。每年'年在表格和364中,以及“金额”中的相应值将是最大的金额'每年。结果数据应为:

Year    Day Amount
1990    1   200
1990    363 2058
1993    1   10
1993    71  564
1993    360 931
1990    364 2058
1993    361 931
1993    362 931
1993    363 931
1993    364 931

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

利用data.table[i, j, by]让我们评估每个jby中的表达式的方式:

library(data.table)


DT <- data.table(
  Year = c(1990, 1990, 1993, 1993, 1993),
  Day  = c(1, 363, 1, 71, 360),
  Amount = c(200, 2058, 10, 564, 931)
)


DT[
  order(Day),
  {
    extended_days <- seq(max(Day) + 1, 364)
    extended_amounts <- rep(max(Amount), length(extended_days))
    list(
      Day = c(Day, extended_days),
      Amount = c(Amount, extended_amounts)
    )
  },
  keyby = Year
]
#     Year Day Amount
#  1: 1990   1    200
#  2: 1990 363   2058
#  3: 1990 364   2058
#  4: 1993   1     10
#  5: 1993  71    564
#  6: 1993 360    931
#  7: 1993 361    931
#  8: 1993 362    931
#  9: 1993 363    931
# 10: 1993 364    931