Извлекайте CSV-файлы и фильтруйте их, используя R - PullRequest
0 голосов
/ 28 апреля 2018

Есть ли более быстрый способ получить кучу 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 голосов
/ 28 апреля 2018

Вот как бы я подошел к этому:

# 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 - это все, что вам нужно для начала работы.

0 голосов
/ 28 апреля 2018

Попробуйте, подходит ли вам read_csv, то есть измените строку

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

до

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

Как правило, это быстрее, чем read.csv. Посмотрите на документы для более подробной информации о том, как его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...