#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