Как извлечь значение из определенной ячейки в сотнях файлов .csv? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть примерно 400 .csv файлов, и мне нужно взять только одно значение из каждого из них (ячейка B2, если она открыта с использованием программного обеспечения для работы с электронными таблицами).

Каждый файл представляет собой выдержку из одной даты иназван соответствующим образом (т. е. extract_2017-11-01.csv, extract_2018-04-05 и т. д.)

Я знаю, что могу сделать что-то подобное, чтобы перебирать файлы (поправьте меня, если я ошибаюсь, или если есть лучшееКстати, пожалуйста, скажите мне):

path <- "~/csv_files"

out.file <- ""

file.names <- dir(path, pattern =".csv")

for(i in 1:length(file.names)){
  file <- read.table(file.names[i], header = TRUE, sep = ",")
  out.file <- rbind(out.file, file)
}

Я хочу эффективно добавить что-то в конце этого, который создает фрейм данных, состоящий из двух столбцов: первый столбец будет отображать дату (это в идеале было бы принятоот имени файла) и второй столбец будет содержать значение в ячейке B2.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

data.table подход

#build a list with csv files you want to load
files <- list.files( path = "yourpath", pattern = ".*.csv$", full.names = TRUE )

library(data.table)
#get value from second row (skip = 1) , second column ( select = 2 ) from each csv, using `data.table::fread`... 
#bind the list together using `data.table::rbindlist`
rbindlist( lapply( files, fread, nrows = 1, skip = 1, select = 2 ) )

извлечение данных из имени файла - это другой вопрос, связанный с регулярным выражением .. пожалуйста, задайте в другом вопросе ...

0 голосов
/ 27 ноября 2018

Это позволяет вам выбрать только вторую строку и второй столбец при импорте:

extract_2018_11_26 <- read.table("csv_files/extract_2018-11-26.csv", 
                                 sep=";", header = T, nrows=1, colClasses = c("NULL", NA, "NULL"))

Поскольку nrows=1 означает, что мы читаем только первые строки (кроме header), и вcolClasses вы вводите "NULL", если хотите пропустить столбец, и NA, если хотите его сохранить.

Здесь, следуя вашему коду, gsub() позволяет найти шаблон и заменить его встрока:

out.file <- data.frame()
for(i in 1:length(file.names)){
  file <- read.table(file.names[i], 
                     sep=";", header = T, nrows=1, colClasses = c("NULL", NA,"NULL"))

  date <- gsub("csv_files/extract_|.csv", "",x=file.names[i]) # extracts the date from the file name
  out.file <- rbind(out.file, data.frame(date, col=file[, 1]))
}

out.file
#         date col
# 1 2018-11-26   2
# 2 2018-11-27   2

Здесь два .csv оригинальных файла:

#first file, name: extract_2018-11-26.csv
  col1 col2 col3
1    1    2    3
2    4    5    6
#second file, name: extract_2018-11-27.csv
  col1 col2 col3
1    1    2    3
2    4    5    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...