【问题标题】:R Map returning 2 different data.frame, using by bind_rowsR Map返回2个不同的data.frame,由bind_rows使用
【发布时间】:2023-02-22 20:38:42
【问题描述】:

我有一个 .csv 文件列表,我试图一个一个地过滤(重新分组时我无法过滤,因为我有太多数据无法同时加载)。

我想 :

  • 要过滤我的数据,然后将其聚合到一个 data.frame 中
  • 统计我过滤的数据

这是我的数据的一个(假)示例:

library(tidyverse)
df_list=data.frame(a=seq(1,20,1), b=seq(41,60,1), c=seq(81,100,1)) %>% map(~{ 
  data.frame( a=.x, b=.x*2, c=.x*3)})

然后我设法做到了:

regrouped_data=df_list %>% map(~{
# Filter
  d2=.x %>% filter(a>5) %>% 
# Count
  print(
    tribble(~date,~initial,~final,
            "name",nrow(.x),nrow(d2)
            )
  )
  return(d2)
}) %>% bind_rows()

问题是:我需要将所有 data.table 组装成一个(因为我有很多文件要过滤)。我怎样才能做到这一点 ?

【问题讨论】:

  • 我还不能编辑我的帖子:有一个 %>% 应该在 filter(a>5) 之后删除

标签: r purrr


【解决方案1】:

可以很好地布置所有内容,以便逻辑在一个简单的循环中清晰明了:

 filterCount <- function(){
  
  for(i in 1:length(df_list)){
    
    data_flt <- df_list[[i]] %>% 
      filter(a>5)
    
    count_flt <- tibble(date = i,
                        nrow.total = nrow(df_list[[i]]),
                        nrow.flt = nrow(data_flt))
    
    if(i == 1){
      
      data_out <- data_flt
      count_out <- count_flt
      
    } else {
      
      data_out <- bind_rows(data_out, data_flt)
      count_out <- bind_rows(count_out, count_flt)
      
    }
    
  }

  return(list(data_out, count_out))
  
}

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多