我有以下两个数据帧; “到来”和“临时”(见下文)。 “到达”描述了到达分组的日期/时间/大小,“临时”具有逐分钟的温度数据。我想要做的是在“到达”中添加一列,到达$ tempAtArrivalTime,列出给定到达时间的当前温度。例如,对于第一次到达,在8:39:04,我希望相应的“tempAtArrivalTime”为76(最近记录的温度,在8:39:00)。这是最简单的方法吗?谢谢!
>arrivals
date time size of arrival
2012 2013-09-09 08:39:04 15
2013 2013-09-09 08:43:15 3
2014 2013-09-09 08:47:50 7
2015 2013-09-09 08:54:47 10
> temps
date time temperature
2013-09-09 08:33:00 76
2013-09-09 08:34:00 75
2013-09-09 08:35:00 74
2013-09-09 08:36:00 75
2013-09-09 08:37:00 76
2013-09-09 08:38:00 76
2013-09-09 08:39:00 76
2013-09-09 08:40:00 76
2013-09-09 08:41:00 77
2013-09-09 08:42:00 78
2013-09-09 08:43:00 77
2013-09-09 08:44:00 78
2013-09-09 08:45:00 77
2013-09-09 08:46:00 77
2013-09-09 08:47:00 77
2013-09-09 08:48:00 77
2013-09-09 08:49:00 78
2013-09-09 08:50:00 79
2013-09-09 08:51:00 80
2013-09-09 08:52:00 80
2013-09-09 08:53:00 79
2013-09-09 08:54:00 78
答案 0 :(得分:1)
试试这个:
library(zoo)
arrivals.z <- read.zoo(arrivals, index = 1:2, tz = "")
temp.z <- read.zoo(temp, index = 1:2, tz = "")
na.locf(merge(arrivals.z, temp.z))[time(arrivals.z)]
给出:
arrivals.z temp.z
2013-09-09 08:39:04 15 76
2013-09-09 08:43:15 3 77
2013-09-09 08:47:50 7 77
2013-09-09 08:54:47 10 78
注意:要获得arrivals
和temp
,我们会使用此功能。 (下次请使用dput
以可重复的形式提供输入。)
Lines1 <- " date time size of arrival
2012 2013-09-09 08:39:04 15
2013 2013-09-09 08:43:15 3
2014 2013-09-09 08:47:50 7
2015 2013-09-09 08:54:47 10
"
Lines2 <- " date time temperature
2013-09-09 08:33:00 76
2013-09-09 08:34:00 75
2013-09-09 08:35:00 74
2013-09-09 08:36:00 75
2013-09-09 08:37:00 76
2013-09-09 08:38:00 76
2013-09-09 08:39:00 76
2013-09-09 08:40:00 76
2013-09-09 08:41:00 77
2013-09-09 08:42:00 78
2013-09-09 08:43:00 77
2013-09-09 08:44:00 78
2013-09-09 08:45:00 77
2013-09-09 08:46:00 77
2013-09-09 08:47:00 77
2013-09-09 08:48:00 77
2013-09-09 08:49:00 78
2013-09-09 08:50:00 79
2013-09-09 08:51:00 80
2013-09-09 08:52:00 80
2013-09-09 08:53:00 79
2013-09-09 08:54:00 78
"
arrivals <- read.table(text = Lines1, skip = 1)[, -1]
temp <- read.table(text = Lines2, header = TRUE)