R - имя переменной в цикле - PullRequest
       2

R - имя переменной в цикле

0 голосов
/ 28 августа 2018

У меня есть, скажем, 10 CSV-файлов с именами, такими как

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 голосов
/ 28 августа 2018

Вы не можете присвоить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...