【问题标题】:dplyr: list of data frames output without for loopdplyr:没有for循环的数据帧输出列表
【发布时间】:2018-11-16 05:58:28
【问题描述】:

以下代码可以正常工作。但是,我想在没有 for 循环的情况下获得所需的输出。有什么想法

library(magrittr)
data("mtcars")

df1 <- mtcars %>% dplyr::filter(mpg > qsec*1/2)
df2 <- mtcars %>% dplyr::filter(mpg > qsec*2/2)

df <- vector("list", 2)

for(i in 1:2){
  df[[i]] <- mtcars %>% dplyr::filter(mpg > qsec*i/2)
}

【问题讨论】:

    标签: r list for-loop dplyr


    【解决方案1】:

    如果我们需要filtered 数据集中的list,我们可以使用purrr 中的maptidyverse 包的一部分)

    library(tidyverse)
    map(1:2, ~ mtcars %>% 
                    dplyr::filter(mpg > qsec * .x/2))
    

    要拥有单个数据集,请将 map 替换为 map_df 并拥有某种标识符,请使用 .id

    map_df(1:2, ~ mtcars %>% 
                     dplyr::filter(mpg > qsec * .x/2), .id = 'grp')
    

    【讨论】:

    • 感谢@akrun 提供非常有用的答案。如果您指导我如何将列表的所有元素堆叠到一个 data.frame 或 tibble 中,将不胜感激。谢谢
    【解决方案2】:

    lapply() 是替换循环的标准方法:

    df <- lapply(1:2 / 2, function(x) dplyr::filter(mtcars, mpg > qsec*x))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2021-04-26
      • 2019-09-01
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多