Как написать цикл for для чтения нескольких файлов CSV в R и подмножество данных, чтобы сделать чистые кадры данных для ggplots? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь прочитать несколько csvs в R, а затем поместить их в подмножество, удалив столбцы, которые мне не нужны, используя функцию 'subset'.я пытаюсь настроить цикл for в r, чтобы я мог добавить функции или вычисления в список csvs для того, чтобы создать кадры данных для ggplots или статистического анализа позже.(В настоящее время у меня установлены tidyverse, dplyr и ggplot2).Прямо сейчас я просто хочу создать подмножество csvs, а затем создать фрейм данных из подмножественных данных.

Я использовал цикл for для успешного чтения нескольких csv в отдельные фреймы данных, установив рабочий каталог, создав список csvs,затем читая их в датафреймах.В настоящее время это выводит фрейм данных для каждого csv, названного в честь оригинального имени файла:

filenames <- gsub("\\.csv$","", list.files(pattern="\\.csv$"))


for(i in filenames){
     assign(i, read.csv(paste(i, ".csv", sep="")))}

Затем я понял, что хочу поместить эти данные в подмножества, прежде чем помещать их в фреймы данных, чтобы избежать повторного кода позже;однако я получаю сообщение об ошибке каждый раз, когда пытаюсь добавить функцию подмножества в цикл for.Это то, что у меня сейчас есть:

for(i in filenames){
  read.csv(i)
  subset(i, select = c("names", "of columns", "I want"))
  assign(i, read.csv(paste(i, ".csv", sep="")))
}

Я получаю сообщение об ошибке «нет такого файла или каталога».Я уверен, что упускаю что-то очевидное, так как мой фонд R плох, но любая помощь или совет, чтобы сделать эту работу, будет принята с благодарностью.Функция подмножества работала для меня в прошлом, но я должен был написать новую строку для каждого кадра данных и хотел бы избежать этого, используя список и цикл for или какой-либо другой метод.

Спасибо

1 Ответ

0 голосов
/ 26 февраля 2019

В итоге я воспользовался предложением @MrFlick и обошел все циклы полностью, используя lapply и объединив все файлы в одном фрейме данных и поднаборах оттуда.окончательный результат ниже:

filenames = list.files(pattern="*.csv")
filenames

myfiles = do.call(rbind, lapply(filenames, function(x) read.csv(x, stringsAsFactors = FALSE)))

myfiles


myfiles.subset = subset(myfiles, select = c("names of", "columns", "I want")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...