【发布时间】:2019-07-02 16:25:25
【问题描述】:
假设我有以下数据:
library(data.table)
set.seed(42)
t <- data.table(time=1001:2000, period=round(runif(1000,1,5)), a=round(rnorm(1000)))
p <- data.table(id=1:10, time=sample(1000:1100,5), a=round(rnorm(10)))
> t[27:38]
time period a
1: 1027 3 -1
2: 1028 5 -1
3: 1029 3 0
4: 1030 4 -2
5: 1031 4 -2
6: 1032 4 -1
7: 1033 3 0
8: 1034 4 1
9: 1035 1 0
10: 1036 4 0
11: 1037 1 0
12: 1038 2 -1
> head(p)
id time a
1: 1 1027 1
2: 2 1094 1
3: 3 1044 -1
4: 4 1053 1
5: 5 1015 1
6: 6 1027 -1
这与我之前以concatenate periods to get time sequences, simultaneously for different starting points 发布的数据相似,但现在有一个附加变量a 是从t 继承而来的。
与我之前的问题相反,我的目标是通过连接 t 中的 n 个句点来将序列直接创建到 p 中。对于n=4,理想的结果应该是这样的
> head(p)
id time a
1: 1 1027 1
2: 1 1030 -1
3: 1 1034 -2
4: 1 1038 1
5: 1 1040 -1
6: 2 1094 1
因为对于 id 1,从 1027 开始,序列是 1027、1027+3=1030、1030+4=1034、1034+4=1038 和 1038+2=1040,其中增量取自 t。此外,t$a 被“带走”填写为p$a。
在我之前的问题中,Jaap 给出了一个绝妙的解决方案来获得每id 一行一行的二维输出。我想知道这是否可以直接在p 中实现。也许这可以通过重复使用 t 到 p 的连接来完成,或者可能有更有效的解决方案(因为效率是这里的关键)。
【问题讨论】:
-
已经给出了所需的输出。但是,我已经更改了文本并且(希望)使其更清晰。
-
期望输出的最后一行不应该是
2 1094 1吗? -
绝对。谢谢!
标签: r join data.table sequence