r - 使用字符串值选择数据框并更改其列名
问题描述
我正在尝试更改数据框中的列名。我想结合使用字符串值来选择数据框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"
}
当我使用 part 时names(eval(as.name(paste("tf_", list[i], "_0", sep=""))))
,它返回给我预期的名称,但是当我想分配一个不同的名称字符串值时,它向我显示错误:分配目标扩展到非语言对象
解决方案
我会这样做。
示例数据:
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"
推荐阅读
- python - mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on '127.0.0.1:3306' on Scrapinghub
- r - 在一个观察者中更新多个单选按钮仅适用于第一个单选按钮
- java - 水平扩展的类和数据库设计
- c++ - 读取嵌套缓冲区的可能 ComputeCPP SYCL 错误
- mysql - Mysql2::Error: 指定的键太长;最大密钥长度为 767 字节
- javascript - EXT JS 使用列表显示使用表格的值。在表头中重复所有行
- json - jq:对象不能是 csv 格式,只能是数组
- python - 修改后无法将 makemigrations 应用于模型
- html - :valid ~ 标签不起作用,输入的 html 元素无效但按原样注册
- javascript - 将自定义文本添加到谷歌饼图中的值?