【问题标题】:Extract dataframes from a large list based on matching values given by another dataframe根据另一个数据框给出的匹配值从大列表中提取数据框
【发布时间】:2019-03-27 16:05:55
【问题描述】:

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

【问题讨论】:

    标签: r filtering


    【解决方案1】:

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

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

    或者,基于How do I remove empty data frames from a list?,您可以使用Filter(function(x) dim(x)[1], output_list) 忽略来自output_list 的空数据帧

    【讨论】:

    • 完美!!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-05-23
    • 2021-05-06
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多