【问题标题】:Using nested lapply to filter for criteria and create multiple data frames使用嵌套 lapply 过滤条件并创建多个数据框
【发布时间】:2019-06-05 18:26:46
【问题描述】:

这是我名为shipment的数据示例:

shipment <- read.table(text = 'Week Org     Forecast       Actual Forecast.over..under Accuracy.. Int.Ext
24    1/22/2018 KNI      $5,095       $7,101              $(2,006)       139%    Int 
366  12/31/2018 DAN  $3,387,247   $1,907,435           $1,479,812         56%    Int ', header = T)

我想创建一个包含 15 个数据框的列表,这些数据框分别针对列 OrgInt.Ext 的这两个向量中的所有可能组合进行过滤。

int.ext <- c("Int","Ext","Total")
site <- c("BAL", "DAN", "LON", "STL", "WC")

当我运行下面的代码时,我最终得到了一个列表,但唯一正确列出的数据框是 Int.Ext 值为“Total”的数据框。应该为“Int”或“Ext”过滤的数据帧不包含任何行。

frames <- lapply(int.ext, function(i){ 
            lapply(site, function(j){ 
                filter(shipment, Org==j, Int.Ext==i)})
                      })

【问题讨论】:

    标签: r filter dplyr lapply


    【解决方案1】:

    如果你愿意离开base R,这可能更简洁:

    library(tidyr)
    library(dplyr)
    
    d <- crossing(Org = site,Int.Ext = int.ext)
    semi_join(shipment,d)
    

    或者如果你真的需要将它们拆分成一个数据框列表,也许

    d <- crossing(Org = site,Int.Ext = int.ext) %>% mutate(id = row_number())
    inner_join(shipment,d) %>% split(x = .,f = .$id)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2023-01-04
      • 1970-01-01
      相关资源
      最近更新 更多