【发布时间】:2016-02-27 18:23:04
【问题描述】:
我正在处理一个大型数据集,我需要向其中添加行。这个问题是在另一个问题中提出的,但我将这个特定问题与原始问题中的其他问题分开。我对 SO 还很陌生,所以如果这不是“完成”的事情,请告诉我。
数据示例:
yr week id days rev p1 p2 p3 f1 f2 f3 f4
2016 3 1 1 5568.3 0 1 0 0 0 0 0
2016 4 1 3 8869.53 0 1 0 0 0 0 0
2016 5 1 2 12025.8 0 1 0 0 0 0 0
2016 6 1 2 9126.6 0 1 0 0 0 0 0
2016 7 1 3 4415.4 0 1 0 0 0 0 0
2016 8 1 2 11586.6 0 1 0 0 0 0 0
2016 10 1 1 2144.4 0 1 0 0 0 0 0
2016 11 1 1 2183.25 0 1 0 0 0 0 0
2016 14 1 2 4998 0 1 0 0 0 0 0
2016 15 1 3 117 0 1 0 0 0 0 0
2016 1 2 4 12743.3 0 0 1 1 1 0 0
2016 2 2 2 7473.48 0 0 1 1 1 0 0
2016 5 2 2 8885.52 0 0 1 1 1 0 0
2016 7 2 1 15330.6 0 0 1 1 1 0 0
2016 8 2 2 3763.8 0 0 1 1 1 0 0
2016 9 2 1 2274.05 0 0 1 1 1 0 0
对于 id 和 yr 的每个组合,都有几行对应于周的数据。 p1:p3 和 f1:f4 列是 id/yr 不变的,rev 随周变化。
对于 yr/id 的每个组合,都有一个星期的最大值。我想要做的是添加缺失的行,从一个开始为 week=1,直到该 yr/id 组合的最大值。
我想结束:
yr week id days rev p1 p2 p3 f1 f2 f3 f4
2016 1 1 0 NA 0 1 0 0 0 0 0
2016 2 1 0 NA 0 1 0 0 0 0 0
2016 3 1 1 5568.3 0 1 0 0 0 0 0
2016 4 1 3 8869.53 0 1 0 0 0 0 0
2016 5 1 2 12025.8 0 1 0 0 0 0 0
2016 6 1 2 9126.6 0 1 0 0 0 0 0
2016 7 1 3 4415.4 0 1 0 0 0 0 0
2016 8 1 2 11586.6 0 1 0 0 0 0 0
2016 9 1 0 NA 0 1 0 0 0 0 0
2016 10 1 1 2144.4 0 1 0 0 0 0 0
2016 11 1 1 2183.25 0 1 0 0 0 0 0
2016 12 1 0 NA 0 1 0 0 0 0 0
2016 13 1 0 NA 0 1 0 0 0 0 0
2016 14 1 2 4998 0 1 0 0 0 0 0
2016 15 1 3 117 0 1 0 0 0 0 0
2016 1 2 4 12743.3 0 0 1 1 1 0 0
2016 2 2 2 7473.48 0 0 1 1 1 0 0
2016 3 2 0 NA 0 0 1 1 1 0 0
2016 4 2 0 NA 0 0 1 1 1 0 0
2016 5 2 2 8885.52 0 0 1 1 1 0 0
2016 6 2 0 NA 0 0 1 1 1 0 0
2016 7 2 1 15330.6 0 0 1 1 1 0 0
2016 8 2 2 3763.8 0 0 1 1 1 0 0
2016 9 2 1 2274.05 0 0 1 1 1 0 0
我曾尝试使用 data.table 包中的 CJ,但问题是每个 id/season 组的连接都不同。任何建议表示赞赏。
【问题讨论】:
-
您需要先找到每个 year/id 的最大值,然后找到缺失的周数,然后为这些缺失的周添加新行。
-
我使用的第一部分:maxwk
-
我认为建议第二部分的一般行动计划是为每个 yr/id 组合生成一周的一列值,然后找出原始数据中缺少哪些值设置,然后创建新行?
-
如果您的数据集名为
DT,请尝试DT[, .SD[match(1:max(week), week)], by = .(yr, id)]。 -
第二部分我猜是这样的:length
标签: r dataframe data.table