【发布时间】:2013-11-26 06:53:25
【问题描述】:
我有两个数据框,logger 和 df(时间是数字):
logger <- data.frame(
time = c(1280248354:1280248413),
temp = runif(60,min=18,max=24.5)
)
df <- data.frame(
obs = c(1:10),
time = runif(10,min=1280248354,max=1280248413),
temp = NA
)
我想在 logger$time 中搜索与 df$time 中每一行最接近的匹配项,并将关联的 logger$temp 分配给 df$temp。到目前为止,我已经成功使用了以下循环:
for (i in 1:length(df$time)){
closestto<-which.min(abs((logger$time) - (df$time[i])))
df$temp[i]<-logger$temp[closestto]
}
但是,我现在有很大的数据帧(logger 有 13,620 行,df 有 266138)并且处理时间很长。我读过循环不是最有效的做事方式,但我不熟悉替代方案。有没有更快的方法来做到这一点?
【问题讨论】:
-
+1 用于带有示例数据的可重现示例,显示您想要什么以及您尝试了什么。顺便说一句 - 下次您使用进行随机抽样的数据时,首先运行命令
set.seed(x),其中x是任何整数(大多数人使用1)。这样,每个复制您的示例的人最终都会得到相同的数据集。
标签: r loops dataframe matching closest