【问题标题】:Using a dataframe to filter a dataframe - purrr::map and dplyr::filter?使用数据框过滤数据框 - purrr::map 和 dplyr::filter?
【发布时间】:2020-03-12 16:22:30
【问题描述】:

我的数据框包含一组参数 (params) 我想过滤包含 (df) 中的数据的数据框,从而创建多个 df 子集。

我的查询在:

params <- expand.grid(category = c("Big","Small"),
                      Year = c(2017,2018,2019),
                      Month = c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")) 

我的数据框是:

df <- data.frame(category =c("Foo", "Bah", "Foo", "Foo", "Bah", "Bah", "Bah", "Foo", "Foo", "Bah"),
                 year = c(2017, 2018, 2017, 2018, 2019, 2019, 2018, 2018, 2017, 2019),
                 month =c("Jan","Feb","Feb","Jan","Nov","Apr","Nov","Jan","May","May"))

我想知道这是否可以通过purrr::map2 完成,但我发现它只适用于向量?

【问题讨论】:

    标签: r dplyr purrr


    【解决方案1】:

    你的意思是这样的?

    purrr::pmap(params, ~dplyr::filter(df,category == ..1, year == ..2, month == ..3))
    

    在基础 R 中,可以写成Map

    Map(function(x, y, z) subset(df, category == x & year == y & month == z), 
                          params$category, params$Year, params$Month)
    

    【讨论】:

    • 是的!我从来没有遇到过使用“..1”等来表示谓词。当我运行它时,我得到一个列表列表。关于如何将每个结果更改为数据框的任何想法?
    • 使用pmap_df, purrr::pmap_df(params, ~dplyr::filter(df,category == ..1, year == ..2, month == ..3))
    猜你喜欢
    • 2016-10-18
    • 2018-07-07
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多