如果我理解正确的话,这可以通过 Zoo 或 xts 轻松完成。首先,这是您的示例数据:
Lines1 <- "Date,Light
26/05/2011 16:00,-529.98
26/05/2011 16:05,-276.68
26/05/2011 16:10,-179.63
26/05/2011 16:15,-385.57
26/05/2011 16:20,-1273.6
26/05/2011 16:25,-1109.7"
Lines2 <- "Date,Flux
26/05/2011 16:01,0.64
26/05/2011 16:04,-1.96
26/05/2011 16:07,-0.51
26/05/2011 16:10,-1.34
26/05/2011 16:13,-1.28
26/05/2011 16:15,-0.22"
con <- textConnection(Lines1)
Light <- read.csv(con, stringsAsFactors=FALSE, header=TRUE)
close(con)
con <- textConnection(Lines2)
Flux <- read.csv(con, stringsAsFactors=FALSE, header=TRUE)
close(con)
现在我们加载 xts 包,它也加载了zoo。然后我们转换Light
and Flux
data.frame 对象到 xts 对象。
library(xts)
light <- xts(Light$Light, as.POSIXct(Light$Date, format="%d/%m/%Y %H:%M"))
flux <- xts(Flux$Flux, as.POSIXct(Flux$Date, format="%d/%m/%Y %H:%M"))
这是很棒的部分。merge.xts
and merge.zoo
将按索引对齐每个系列。na.locf
填写每一个NA
与之前的值。
Data <- merge(light,flux)
# light flux
# 2011-05-26 16:00:00 -529.98 NA
# 2011-05-26 16:01:00 NA 0.64
# 2011-05-26 16:04:00 NA -1.96
# 2011-05-26 16:05:00 -276.68 NA
# 2011-05-26 16:07:00 NA -0.51
# 2011-05-26 16:10:00 -179.63 -1.34
# 2011-05-26 16:13:00 NA -1.28
# 2011-05-26 16:15:00 -385.57 -0.22
# 2011-05-26 16:20:00 -1273.60 NA
# 2011-05-26 16:25:00 -1109.70 NA
Data <- na.locf(Data)
最后,我们可以从合并后的数据中提取 3 分钟索引Data
object.
Data[index(flux),]
# light flux
# 2011-05-26 16:01:00 -529.98 0.64
# 2011-05-26 16:04:00 -529.98 -1.96
# 2011-05-26 16:07:00 -276.68 -0.51
# 2011-05-26 16:10:00 -179.63 -1.34
# 2011-05-26 16:13:00 -179.63 -1.28
# 2011-05-26 16:15:00 -385.57 -0.22