使用R获取csv文件并过滤

时间:2018-04-28 05:55:45

标签: r performance csv filter tidyverse

有没有更快的方法来获取一堆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)

2 个答案:

答案 0 :(得分:2)

尝试read_csv是否适合您,即更改行

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

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

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

答案 1 :(得分:1)

以下是我如何做到这一点:

# 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就是你需要的所有东西。