因此,我在这里有两个问题,我合并了解决方案,但是似乎我没有很好地实现它们。(第一 季度第二季度)
因此,我正在使用read_delim()读取文件,并尝试过滤掉一些数据,然后再将它们保存为一种数据类型。
data <- data.frame()
for (file in files){
name = strsplit(file, split = "\\.")[[1]][1]
tmp <- data %>% bind_rows(read_delim(file = file, delim = ";", col_types = cols(
a = col_double(),
b = col_double(),
c = col_character()
)) %>% mutate(filename = name)
data_tmp <- tmp %>%
filter(!str_detect(c, 'a'))
data <- rbind(data, tmp_data)
}
显然,我在第一个问题中遇到的问题再次出现。看起来mutate(filename = name)始终从读取的最后一个元素获取值。
如果使用,我们可以使其更紧凑map
。循环遍历files
,使用读取数据read_delim
,使用文件名的子字符串,filter
行创建'filename'列并将其转换为单个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'))
})
在OP的for
循环中,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)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句