【问题标题】:Fetch csv files and filter using R使用 R 获取 csv 文件并过滤
【发布时间】:2018-10-08 22:43:05
【问题描述】:

有没有更快的方法来获取一堆 csv 文件,将它们合并在一起(它们都具有相同的结构)但只保留那些大于 5 的值(一列)?

每个 csv 文件将有数千行,而通常少于 100 行(每个 csv)将大于 5。

我的工作代码是:

library(tidyverse)

filelocns <-"C:/Data/test/"

# get files list from folder
file.list <- list.files(path=filelocns, recursive=T,pattern='*.csv')  

# row bind the listed CSVs and filter for Values >= 5
rows_gt5 <- lapply(paste0(filelocns,file.list),read.csv) %>% 
    bind_rows() %>% 
    filter(Value>=5)

【问题讨论】:

    标签: r performance csv filter tidyverse


    【解决方案1】:

    试试read_csv是否适合你,即换行

    rows_gt5 <- lapply(paste0(filelocns,file.list),read.csv) %>%
    

    rows_gt5 <- lapply(paste0(filelocns,file.list),read_csv) %>%
    

    一般来说它比read.csv 快。 查看docs 以获取有关如何使用它的更多详细信息。

    【讨论】:

    • 确实快得多!
    【解决方案2】:

    以下是我的处理方法:

    # source dependencies
    library(dplyr)
    
    # declare path to desired directory
    filelocns <-"C:/Data/test/"
    
    # list all of the files within this directory
    file.list <- list.files(path=filelocns
        ,pattern='\\.csv$'
        ,all.files = FALSE
        ,full.names = TRUE
        ,ignore.case = FALSE
    )  
    
    # apply the read_csv function to our list of files
    row_gt5 <- ldply(file.list, read_csv) %>%
    
    # and filter out values less than five
        filter(Values>=5)
    

    您可以将 read_csv 函数替换为自定义函数包装器,以便在将原始数据存储到主数据帧之前动态重新格式化原始数据。 听起来 read_csv 是你所需要的一切。

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多