【问题标题】:Select a data frame using string values and change its column name使用字符串值选择数据框并更改其列名
【发布时间】:2018-05-07 08:07:53
【问题描述】:

我正在尝试更改数据框中的列名。我想结合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="")))) 部分时,它返回给我预期的名称,但是当我想分配不同的名称字符串值时,它显示错误:分配目标扩展到非语言对象

【问题讨论】:

  • 您能否提供一个我们可以合作的Data 示例?
  • Data 是一个不同的数据框,它具有多个列,其中一些列被命名为 "a","b","c","d"。分配部分工作正常。问题是当我想更改名为 paste("tf_", list[i], "_0", sep="") 的新数据框的列名时
  • 如果你想改变data.frame的列名,你可以直接这样做:colnames(Data) &lt;- list if Data的列号和list的长度相同。
  • 尝试将2nd 行更改为:'df = get(paste("tf_", list[i], "_0", sep="")); df = "blablabla"
  • @MKR 4 你的意思是colnames(df)="blablabla"

标签: r string dataframe


【解决方案1】:

我会这样做的。

示例数据:

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" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2013-08-15
    相关资源
    最近更新 更多