R-循环中的变量名

时间:2018-08-28 14:42:29

标签: r loops variables

我假设有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")
}

当然不起作用-在这种表示法中我不可读。我该如何解决?

1 个答案:

答案 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