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

问题描述 投票:0回答:1

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

我有一张桌子如下:

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

我想在此表中添加数据行,以便在表中每个'Year'的最大'Day'和364之间的所有数字都有一个行条目,'Amount'中的相应值将是最大值每年的“金额”。结果数据应为:

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

有任何想法吗?

r data.table
1个回答
1
投票

利用data.table[i, j, by]如何让我们在j中为每组by评估表达式:

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
© www.soinside.com 2019 - 2024. All rights reserved.