从列中查找最接近的值并从相邻列返回数字(在列表中)

时间:2016-11-22 11:06:39

标签: r

我有一个x数据帧的大列表(List1),每个数据帧由2个变量的4个观察值组成(比如说)。典型的数据框如下所示:

YEAR   TEMP
1861    2.09
1862    2.17
1863    2.02
1864    2.04
............

我希望在第二列中找到最接近值2的值(但理想情况下不超过2.05且不小于1.95),然后将年份从相邻列返回到左侧。这在Excel中使用VLOOKUP和INDEX等函数很简单,但在R中是否有任何等效函数?忽略它需要的部分> = 1.95和< = 2.05,我到目前为止尝试过:

result=lapply(List1, function(x) which.min(abs(x-2)))

但这会返回错误:

Error in which.min(abs(x - 2)) : 
(list) object cannot be coerced to type 'double'

我不认为我离这里很远,但有人可以建议我在哪里纠正这个问题吗?

1 个答案:

答案 0 :(得分:2)

您的列表中的每个元素apply都是data.frames

因此,为了使您的陈述有效,您需要使用要进行测试的x列:

result <- lapply(List1, function(x) x[which.min(abs(x$TEMP-2)), ])

result <- lapply(List1, function(x) x$YEAR[which.min(abs(x$TEMP-2))])

如果你只想要这一年。

如果您想添加其他条件,请尝试:

result <- lapply(List1, function(x) {x <- x[x$TEMP <= 2.05 & x$TEMP >= 1.95, ] ; return(x$YEAR[which.min(abs(x$TEMP-2))])})