Я бы сделал это так.
Пример данных:
df1 <- data.frame(a = rnorm(10), b = rnorm(10), x = rnorm(10))
df2 <- data.frame(a = rnorm(10), c = rnorm(10), y = rnorm(10))
df3 <- data.frame(b = rnorm(10), d = rnorm(10), z = rnorm(10))
Сначала используйте mget()
, чтобы поместить ваши фреймы данных в список.
test <- mget(paste0("df", 1:3))
Текущие имена:
> sapply(test, names)
df1 df2 df3
[1,] "a" "a" "b"
[2,] "b" "c" "d"
[3,] "x" "y" "z"
Затем создайте вектор замещающих имен:
dud <- c(a = "n1", b = "n2", c = "n3", d = "n4")
Затем выполните цикл по списку, чтобы изменить соответствующие имена столбцов во всех фреймах данных:
for(i in 1:length(test)){
names(test[[i]])[names(test[[i]]) %in% names(dud)] <- dud[names(dud) %in% names(test[[i]])]
}
Новые имена:
> sapply(test, names)
df1 df2 df3
[1,] "n1" "n1" "n2"
[2,] "n2" "n3" "n4"
[3,] "x" "y" "z"