Выберите фрейм данных, используя строковые значения, и измените имя его столбца. - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь изменить имя столбца во фрейме данных. Я хотел бы выбрать фрейм данных, используя строковые значения в сочетании с eval(as.name(paste())).

Вот мой код:

list <-c("a","b","c","d")

for (i in 1: length(list) )
{
assign(paste("tf_", list[i], "_0", sep=""), as.data.frame( ifelse ( !is.na( Data[[list[i]]] ),1,0 ) ) )

names(eval(as.name(paste("tf_", list[i], "_0", sep=""))))<-"blablabla"

}

Когда я использую деталь names(eval(as.name(paste("tf_", list[i], "_0", sep="")))), она возвращает мне ожидаемое имя, но когда я хочу присвоить другое значение строки имени, она показывает мне ошибку: цель назначения расширяется до неязыкового языка объект

1 Ответ

0 голосов
/ 07 мая 2018

Я бы сделал это так.

Пример данных:

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" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...