Как я могу создать функцию или цикл переименования столбцов 24 фреймов данных?

#r #data-science

#r #наука о данных

Вопрос:

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

    t i  j      k          v       q
1 1997 4 12  90930 210.981000 160.433
2 1997 4 12 121190   2.614000   4.187
3 1997 4 20 570110  26.957000   2.500
4 1997 4 31 190211   3.747064  21.613
5 1997 4 31 252329  22.541865 626.000
  

Мне нужно изменить имена переменных на следующие Год, Продукт, Экспортер, Импортер, поток, количество для t, i, j, k, v, q соответственно.

Я использую приведенную ниже функцию, но она не сохраняет изменения. Когда я запускаю код, он выдает мне выходные данные с новым фреймом данных и новыми именами столбцов, но он не заменяется на исходный фрейм данных.

То, что я ищу, — это минимизировать количество строк, записанных для достижения этой цели, поэтому, например, выполнение «BACI1995 <- ChangeNames (BACI1995) BACI1996 <- ChangeNames (BACI1996)» не является вариантом

 ChangeNames <- function(x) {
    names(x) <- c("Year", "Product", "Exporter", "Importer", "flow", "Quantity")
    return(x)
}

ChangeNames(BACI1995)
  

Ответ №1:

Итак, если вы действительно хотите свести к минимуму количество нажатий клавиш, тогда рассмотрите этот однострочный:

 for (i in 1995:2018) names(.GlobalEnv[[paste0("BACI", i)]]) <- c("Year", "Product", "Exporter", "Importer", "flow", "Quantity")
  

Комментарии:

1. Спасибо, это потрясающе!

2. ekoam, будет ли это работать, если в глобальной среде есть другие объекты, кроме именованных объектов BACI?

3. ДА. Здесь .GlobalEnv[[paste0("BACI", i)]] мы выбираем только из . GlobalEnv эти объекты называются «BACI *». Мы никогда не касаемся какого-либо другого объекта в . GlobalEnv. С другой стороны, рассмотрим общий цикл for , в котором счетчик i также является объектом, хранящимся в . GlobalEnv. Для каждого цикла счетчик изменяет себя, даже если в нем есть другие объекты. GlobalEnv. Вам не кажется, что это похоже на приведенный выше случай? @KarthikS