首页 > 解决方案 > 根据另一个数据框给出的匹配值从大列表中提取数据框

问题描述

我是 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),但我似乎无法成功。非常感谢您的帮助!

标签: rfiltering

解决方案


你可以这样做: output_list <- lapply(my_list, function(x) merge(x, df_xy))

output_list中,第二个列表将为空。

或者,基于如何从列表中删除空数据框?,然后您可以忽略output_list使用的空数据框Filter(function(x) dim(x)[1], output_list)


推荐阅读