r - 根据另一个数据框给出的匹配值从大列表中提取数据框
问题描述
我是 R 新手,尽管研究了该网站,但我似乎无法解决这个问题:
我有一个非常大的数据框列表(来自不同站点的历史气候数据),我需要创建一个新列表,该列表仅包含由一个独立数据框给出的具有特定值(经度和纬度)的数据框。
所以我有:
df1 <- data.frame("x" = c(1, 1, 1), "y" = c(-2, -2, -2), "a" = c(3, 6, 9), "b" = c(4, 5, 3))
df2 <- data.frame("x" = c(1.2, 1.2, 1.2), "y" = c(-2, -2, -2), "a" = c(3, 4, 78), "b" = c(12, 5, 8))
df3 <- data.frame("x" = c(1.3, 1.3, 1.3), "y" = c(-2.1, -2.1, -2.1), "a" = c(19, 5, 5), "b" = c(7, 7, 20))
my_list <- list(df1, df2, df3)
每个数据帧对应一个站点,在两列中给出了特定的 lon 和 lat 值(所有行长度的恒定值,因为它是同一个站点)
> df1
x y a b
1 1 -2 3 4
2 1 -2 6 5
3 1 -2 9 3
> df2
x y a b
1 1.2 -2 3 12
2 1.2 -2 4 5
3 1.2 -2 78 8
> df3
x y a b
1 1.3 -2.1 19 7
2 1.3 -2.1 5 7
3 1.3 -2.1 5 20
然后,我有一个独立的数据框,其中包含经度和纬度,我希望获得气候数据。
df_xy <- data.frame("x"= c(1, 1.3), "y" = c(-2, -2.1))
> df_xy
x y
1 1.0 -2.0
2 1.3 -2.1
理想情况下,我会获得一个新列表,其中包含与指定的 x、y 匹配的数据帧。
output_list <- list(df1, df3)
尽管我已经尝试过使用 lapply 和 Map(merge, my_list, df_xy),但我似乎无法成功。非常感谢您的帮助!
解决方案
你可以这样做:
output_list <- lapply(my_list, function(x) merge(x, df_xy))
在output_list
中,第二个列表将为空。
或者,基于如何从列表中删除空数据框?,然后您可以忽略output_list
使用的空数据框Filter(function(x) dim(x)[1], output_list)
推荐阅读
- python - 如何更改 Django 表单字段的默认空字段错误消息
- r - wdpar: if (file.access(phantompath, 1) < 0) { : 参数长度为零时出错
- html - 是否有充分的理由将 GA(Google Analytics)移动到 GTM(Google Tag Manager)中?
- azure - 二头肌模板中的引用对象变量
- r - lapply'd 几何失去因子排序
- java - BufferedInput/OutputStream 在 Java 中实际上做了什么
- javascript - 使用JS滚动到导航项目中未指定的所有div或部分时停用导航项目
- javascript - 如何使异步等待结果
- javascript - 使用 GSAP 悬停时显示光标图像 - 中心问题
- python - 为什么我的 Discord 机器人总是说出它的信息?