代码之家  ›  专栏  ›  技术社区  ›  MYaseen208

dplyr:不带for循环的数据帧输出列表

  •  2
  • MYaseen208  · 技术社区  · 6 年前

    以下代码工作正常。但是,我想得到所需的输出没有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)
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   akrun    6 年前

    如果我们需要 list 属于 filter ED数据集,我们可以使用 map purrr (部分) tidyverse 软件包)

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

    若要使用单个数据集,请替换 地图 具有 map_df 要获得某种标识符,请使用 .id

    map_df(1:2, ~ mtcars %>% 
                     dplyr::filter(mpg > qsec * .x/2), .id = 'grp')
    
        2
  •  3
  •   s_baldur    6 年前

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

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