我有一个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'
我不认为我在这里很远,但是有人可以建议我可以在哪里纠正此问题吗?
您的功能是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))])})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句