Чтение в нескольких файлах и добавление имени файла в фрейм данных [дубликат]

Для таких новичков, как я, эти ресурсы помогли:

Найти файл apc.ini, чтобы внести изменения, рекомендованные c33s выше, и установить рекомендуемые суммы: http: //www.untwistedvortex. com / optimizing-tuning-apc-alternate-php-cache /

Понимание того, что apc.ttl: http://www.php.net/manual/en/apc .configuration.php # ini.apc.ttl

Понимание того, что apc.shm_size: http://www.php.net/manual/en/apc.configuration.php # ini.apc.shm размер

2
задан Konrad Rudolph 19 September 2017 в 12:58
поделиться

4 ответа

Обычно я использую следующий подход, основанный на dplyr / tidyr:

data = tibble(File = files) %>%
    extract(File, "Site", "([A-Z]{2}-[A-Za-z0-9]{3})", remove = FALSE) %>%
    mutate(Data = lapply(File, read_csv)) %>%
    unnest(Data) %>%
    select(-File)
3
ответ дан Konrad Rudolph 16 August 2018 в 00:28
поделиться
  • 1
    Очень гладкий. Спасибо. Я нахожу mutate () и extract () и unsest () немного трудным для подражания, но он отлично работает! Кроме того, что такое & quot; select (-File) & quot; делать? – kray 19 September 2017 в 13:26
  • 2
    @kray Это просто удаление столбца File после того, как мы закончили с ним. Что касается поиска рабочего процесса, трудно следовать: это временно. Как только вы привыкнете к потоку трубопровода dplyr, это станет без усилий. Тем не менее, я теперь изменил выражения, чтобы свести код чтения данных. – Konrad Rudolph 19 September 2017 в 13:34

Вам просто нужно написать свою собственную функцию, которая читает csv и добавляет нужный столбец, прежде чем объединять их.

my_read_csv <- function(x) {
  out <- read_csv(x)
  site <- str_extract(x, "[A-Z]{2}-[A-Za-z0-9]{3}")
  cbind(Site=site, out)
}

filenames <- list.files(path, full.names = TRUE, pattern = fileptrn, recursive = TRUE)
tbl <- lapply(filenames, my_read_csv) %>% bind_rows()
1
ответ дан Aaron 16 August 2018 в 00:28
поделиться

Здесь вы можете использовать purrr::map2, который работает аналогично mapply

filenames <- list.files(path, full.names = TRUE, pattern = fileptrn, recursive = TRUE)
sites <- str_extract(filenames, "[A-Z]{2}-[A-Za-z0-9]{3}")  # same length as filenames

library(purrr)
library(dplyr)
library(readr)
stopifnot(length(filenames)==length(sites))  # returns error if not the same length
ans <- map2(filenames, sites, ~read_csv(.x) %>% mutate(id = .y))  # .x is element in filenames, and .y is element in sites

. Вывод map2 - это список, аналогичный lapply

Если вы иметь версию развития purrr, вы можете использовать imap, которая является оберткой для map2 с индексом

0
ответ дан CPak 16 August 2018 в 00:28
поделиться

Вы можете создать вектор имен файлов на основе «сайтов» с той же длиной, что и tbl, а затем объединить два, используя cbind

### Get file names
filenames <- list.files(path, full.names = TRUE, pattern = fileptrn, recursive = TRUE)
sites <- str_extract(filenames, "[A-Z]{2}-[A-Za-z0-9]{3}")

### Get length of each csv
file_lengths <- unlist(lapply(lapply(filenames, read_csv), nrow))

### Repeat sites using lengths
file_names <- rep(sites,file_lengths))

### Create table
tbl <- lapply(filenames, read_csv) %>% 
  bind_rows()

### Combine file_names and tbl
tbl <- cbind(tbl, filename = file_names)
0
ответ дан waskuf 16 August 2018 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: