Использование циклов или lapply для чтения и именования файлов - PullRequest
0 голосов
/ 28 января 2019

Я новичок в R, поэтому мой вопрос может быть очень простым.Я искал ответ на этот вопрос в меру своих возможностей, но я не мог найти то, что мне нужно.

У меня есть несколько файлов, содержащих данные, собранные из каждого состояния.В настоящее время у меня есть файлы с такими именами, как «ALTable.csv», «DETable.csv» и т. Д.

Я хочу прочитать эти файлы в программе и сохранить содержимое в именованном фрейме данных.Затем я хочу выполнить операции с этими фреймами данных и использовать их для создания новых фреймов данных, заполненных вычислениями со старыми фреймами данных.

В настоящее время у меня много строк кода, таких как

AL <- read.csv("ALTable.csv")
DE <- read.csv("DETable.csv")

Я стараюсь не выполнять эту команду индивидуально для каждого состояния.Мне удалось выяснить, как сказать R составить список соответствующих файлов и как их загрузить, но я не знаю, как сказать R создать список этих файлов, прочитать их и сохранить их как именованныефрейм данных.

Аналогично, после того, как у меня есть эти фреймы данных, я выполняю вычисления с этими фреймами и создаю новые фреймы данных, заполненные этими вычислениями.У меня есть строки, такие как

MuAL <- AL$prop/AL$pop
MuDE <- DE$prop/DE$pop

Я хотел бы выполнить эти вычисления и сохранить результаты с заданными именами без необходимости делать это для каждого отдельного состояния.

В идеале я мог бы просто составить единый список всех сокращений и в каждой строке кода, где происходит отдельное состояние, вставить заполнители, где идет сокращение состояния, и создать цикл for, который проходит по моему списку и вставляетсокращения для заполнителей.Однако я понятия не имею, как это сделать, кроме самого наивного способа, который не сработал.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

если у вас есть список ваших сокращений и все файлы csv действительно названы одинаково, вы можете сгенерировать список фрейма данных, используя lapply.

Что-то вроде:

abbr<- c("AL","DE")
name(abbr)<-abbr
listofDF <- lapply(abbr,function(ab)read.csv(paste0(ab,"Table.csv"))

и тогда вы сможете сделать muAL <- listofDF$AL$prop/listofDF$AL$pop или даже если вы хотите сделать это для всех сокращений:

mu <- lapply(litofDF,function(i)i$prop/i$pop)

И здесь mu$AL будет хранить эквивалент вашего MuAL.

Может быть, вы могли бы привести пример данных, которые могут помочь найти хорошее решение.

0 голосов
/ 28 января 2019

Сначала поместите все .csv файлы, которые вы хотите загрузить, в какую-то папку (давайте назовем папку data для этого примера).Тогда ваш рабочий каталог должен быть настроен на родительский каталог этой папки.Затем вы можете загрузить все файлы из этого каталога следующим образом:

for (file in dir('data/')) {
  assign(substr(file, 1, 2), read.csv(paste0('data/', file)))
}
...