Добавление нового столбца в список фреймов данных - PullRequest
0 голосов
/ 02 июля 2019

Я очищаю некоторые данные, импортируемые из Excel, из большого количества файлов, и мне нужно создать два ключа на основе индекса из имени файла во время импорта. Файлы импортируются по стране. Мне удалось импортировать файлы в отдельные фреймы данных, но я столкнулся с трудностями при создании новых переменных. Для краткости я установил страну = "США" и год = 1980.

Моей первой мыслью было создание списка фреймов данных, присутствующих в среде, путем фильтрации по шаблону "США". Однако это плохой стиль, и продукт выглядит как список символов, который не связан с самими фреймами данных.

usadflist <- Filter(is.data.frame, mget(ls(pattern="USA")))

Это когда я перешел к настройке фактического импорта, используя dplyr :: mutate (), однако не смог указать переменную, которая еще не была создана, то есть когда я попробовал cbind (), как показано ниже:

usalist <- list.files(path ="~/Desktop/reports/usa")

for(i in usalist) {
  assign(paste(i),read_excel(path = paste("Desktop/reports/usa/",i,sep="")))
  cbind(usalist[[i]][country]<-"usa", usalist[[i]][year]<-1980)
}

Дано сообщение об ошибке: Ошибка в *tmp* [[i]]: индекс за пределами.

Я ожидаю, что у каждого из фреймов данных будет новая переменная: страна со значением «сша» и переменная: год со значением 1980. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 02 июля 2019

Вы пробовали что-то вроде:

usalist <- list.files(path ="~/Desktop/reports/usa")

for(i in 1:length(usalist)){
  df <- read_excel(path = paste("Desktop/reports/usa/", usalist[i], sep = ""))
  df$country <- "usa"
  df$year <- 1980L
  assign(usalist[i], df); rm(df)
}; rm(i)

Не запускали его, поэтому я не могу сказать, не ошибся ли я в опечатке.

...