Мы могли бы сделать его более компактным, если бы использовали map
. L oop поверх files
, прочитайте данные с помощью read_delim
, создайте столбец 'filename' с подстрокой имени файла, filter
строк и преобразуйте его в один data.frame с _dfr
суффиксом
library(purrr)
library(dplyr)
out <- map_dfr(files, ~ {
file <- .x
read_delim(file, delim = ";", col_types = cols(
a = col_double(),
b = col_double(),
c = col_character()
)) %>%
mutate(filename = str_remove(file, "\\..*")) %>%
filter(!str_detect(c, 'a'))
})
В ОП for
l oop data %>% bind_rows
не требуется, поскольку мы уже rbind
используем 'tmp_data` в каждой итерации
data <- data.frame()
for (file in files){
name = strsplit(file, split = "\\.")[[1]][1]
tmp <- read_delim(file = file, delim = ";", col_types = cols(
a = col_double(),
b = col_double(),
c = col_character()
)) %>% mutate(filename = name)
tmp_data <- tmp %>%
filter(!str_detect(c, 'a'))
data <- rbind(data, tmp_data)
}