我正在尝试更改数据框中的列名。我想使用字符串值和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=""))))
时,它会返回预期的名称,但是当我想指定一个不同的名称字符串值时,它会向我显示错误: 赋值目标扩展为非 - 语言对象
答案 0 :(得分:0)
我会这样做。
示例数据:
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"