Присоединение имени файла к фрейму данных в R - PullRequest
2 голосов
/ 05 апреля 2020

Я хочу добавить имя файла в мою таблицу, но кажется, что оно на самом деле не работает.
Что я делаю, так это перебираю список имен файлов, открываю их, добавляю все данные в один фрейм данных и для каждого добавленного файла я хочу добавить его имя файла. Я ожидаю, что он будет добавлен в каждую строку, чтобы позже, когда я посмотрю на данные, я узнал, из какого файла происходит данная строка.
Но, похоже, он не работает должным образом.

data <- data.frame()
for (file in files){

  name = strsplit(file, split = "\\.")[[1]][1]

  data <- data %>% bind_rows(read_delim(file = file, delim = ";", col_types = cols(
    a = col_double(),
    b = col_double(),
    )) %>% mutate(name = name))
}

Я считал, что функция mutate должна была добиться цели, по-видимому, в конце они все имеют одинаковое значение.

1 Ответ

1 голос
/ 05 апреля 2020

Поскольку мы используем tidyverse, опция

library(readr)
library(purrr)
files_no_ext <- tools::file_path_sans_ext(files)
out <- imap_dfr(set_names(files, files_no_ext), ~ 
      read_delim(.x, delim = ";", 
         col_types = cols(a = col_double(),b = col_double()),
              .id = 'name')

Или использование data.table

library(data.table)
out <- rbindlist(lapply(setNames(files, files_no_ext), fread), idcol = 'name')

В ОП for l oop

dat <- data.frame()
for (file in files){
     name <- tools::file_path_sans_ext(file)
     tmpdat <- read_delim(file = file, delim = ";", 
             col_types = cols(
                    a = col_double(),
                    b = col_double()
                      )) %>%
              mutate(name = name)
      dat <- rbind(dat, tmpdat)

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