我有一个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'
我不认为我离这里很远,但有人可以建议我在哪里纠正这个问题吗?
答案 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))])})