查找与最近日期对应的值

时间:2017-01-18 21:35:26

标签: r

我有一个带有xdate

的data.frame Value
x = structure(list(date = structure(c(1376534700, 1411930800, 1461707400, 
1478814300, 1467522000, 1451088000, 1449956100, 1414214400, 1472585400, 
1418103000, 1466176500, 1434035100, 1442466300, 1410632100, 1448571900, 
1439276400, 1468382700, 1476137400, 1413177300, 1438881300), class = c("POSIXct", 
"POSIXt"), tzone = ""), Value = c(44L, 49L, 31L, 99L, 79L, 92L, 
10L, 72L, 60L, 41L, 28L, 21L, 67L, 61L, 8L, 65L, 40L, 48L, 53L, 
90L)), .Names = c("date", "Value"), row.names = c(NA, -20L), class = "data.frame")

以及仅包含y

的其他列表date
y = structure(c(1470356820, 1440168960, 1379245020, 1441582800, 1381753740
), class = c("POSIXct", "POSIXt"), tzone = "")

在我尝试使用循环之前,我想知道是否有一种快速方式(或包)从Value中的最近日期x查找y中的日期1}?目标是在date中找到最接近x date的{​​{1}}并获取相应的y

所需的输出(来自Excel Value ,所以可能不完美)会是这样的:

VLOOKUP

2 个答案:

答案 0 :(得分:2)

使用data.table您可以加入最近的值

library(data.table)

x <- as.data.table(x)
y <- data.table(date=y)

res <- x[y, on='date', roll='nearest']

答案 1 :(得分:2)

sapply(y, function(z) x$Value[which.min(abs(x$date - z))])
# [1] 40 65 44 67 44