【发布时间】:2015-01-03 16:57:54
【问题描述】:
在浪费了将近一天之后,我正在寻求帮助。我有一个大数据框(bdf)和一个小数据框(sdf)。我想根据 sdf$y 的值(它作为时间变量的函数而变化)将变量 z 添加到 bdf。
这是一个可重现的例子:
bdf <- data.frame(tb = seq(as.POSIXct("2013-05-19 17:11:22 GMT", tz="GMT"), by=5624*24, length.out=10))
bdf
tb
1 2013-05-19 17:11:22
2 2013-05-21 06:40:58
3 2013-05-22 20:10:34
4 2013-05-24 09:40:10
5 2013-05-25 23:09:46
6 2013-05-27 12:39:22
7 2013-05-29 02:08:58
8 2013-05-30 15:38:34
9 2013-06-01 05:08:10
10 2013-06-02 18:37:46
sdf <- data.frame(ts = as.POSIXct(c("2013-05-22", "2013-05-25", "2013-05-30"), tz="GMT"), y = c(0.2, -0.1, 0.3))
> sdf
ts y
1 2013-05-22 0.2
2 2013-05-25 -0.1
3 2013-05-30 0.3
我想在 bdf 中使用以下 sdf$y 值创建变量 z:
0.2 对于 bdf$tb 的范围从第一个 bdf$tb 值到 sdf$ts 的第一个和第二个值的中间值的行。在这个简单的示例中,dbf 的第 1 到第 3 行的时间 bdf$tb 低于“2013-05-23 12:00:00 GMT”就是这种情况。
-0.1 对于 bdf$tb 的范围从 sdf$ts 的第一个和第二个值的中间到 sdf$ts 的第二个和第三个值的中间的行。在这个简单的示例中,dbf 的第 4 行和第 5 行的情况是 bdf$tb 在“2013-05-23 12:00:00 GMT”和“2013-05-27 12:00:00 GMT”之间.
0.3 对于 bdf$tb 范围从 sdf$ts 的第二个和第三个值的中间到 bdf$tb 的最后一个值的所有行。在这个简单的示例中,dbf 的第 1 到 6 到 10 行的时间大于“2013-05-23 12:00:00 GMT”的时间。
因此,最终,大数据框 bdf 应如下所示:
tb z
1 2013-05-19 17:11:22 0.2
2 2013-05-21 06:40:58 0.2
3 2013-05-22 20:10:34 0.2
4 2013-05-24 09:40:10 -0.1
5 2013-05-25 23:09:46 -0.1
6 2013-05-27 12:39:22 0.3
7 2013-05-29 02:08:58 0.3
8 2013-05-30 15:38:34 0.3
9 2013-06-01 05:08:10 0.3
10 2013-06-02 18:37:46 0.3
我无法成功使用 dplyr::mutate 并且使用循环无处可去...任何帮助将不胜感激。我希望我清楚地将问题描述为遵守礼仪(这是我的第一个问题)。
【问题讨论】:
-
听起来像 加入最近的值 在包中
data.table可能是roll = "nearest"但我没有这方面的经验,我很好奇dplyr中是否有可能
标签: r