我假设有10个csv文件,其名称为as
file_1_tail.csv
file_2_tail.csv
file_3_tail.csv
...
file_10_tail.csv
名称唯一的区别在于数字(1到10)。每个具有相同的结构-1000行和100列。
我需要将它们读到R,选择特定的列并写为新文件。我的一个文件代码如下:
file_2_tail = read_csv("file_2_tail.csv")
file_2_tail_selected = file_2_tail[,c(1:7,30)])
write.csv2(file_2_tail_selected, file = "file_2_selected.csv")
现在我想使用循环来自动处理所有十个文件。
for (i in 1:10){
file_"i"_tail = read_csv("file_"i"_tail.csv")
file_"i"_tail_selected = file_"i"_tail[,c(1:7,30)]
write.csv2(file_"i"_tail_selected, file = "file_"i"_selected.csv")
}
当然不起作用-在这种表示法中我不可读。我该如何解决?
答案 0 :(得分:1)
您不能将read_csv
的结果分配给这样的字符串。相反,您可以将其存储在临时变量tmp
for (i in 1:10){
tmp <- read_csv(paste0("file_", i, "_tail.csv"))
tmp <- tmp[, c(1:7,30)]
write.csv2(tmp, file = paste0("file_", i, "_selected.csv"))
}
顺便说一句,这可能是一种读取多个文件的更有效的方法
library(tidyverse)
filePattern <- "\\.csv$"
fileList <- list.files(path = ".", recursive = FALSE,
pattern = filePattern, full.names = TRUE)
result <- fileList %>%
purrr::set_names(nm = (basename(.) %>% tools::file_path_sans_ext())) %>%
purrr::map_df(read_csv, .id = "FileName") %>%
select(1:7, 30)
result