首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在循环中更改dataframe中的列名?

如何在循环中更改dataframe中的列名?
EN

Stack Overflow用户
提问于 2016-01-29 12:19:28
回答 4查看 18K关注 0票数 3

我有10个(例如)数据处理程序,它们的名称类似于df1、df2、df3、.对于10列,我想给每一列中的第10列命名,比如dataframe名称( df1中的第10列必须有"df1“名称,df2 -- "df2”等等)

我试过这个

代码语言:javascript
复制
for (i in paste0("df",1:10)){
     assign(names(get(i))[10],
            value=i
            )
     }

但是没有什么改变,我怎么能解决这个问题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-29 12:37:05

你可以分三步完成:

--get

-改变colnames

-- assign

代码语言:javascript
复制
for (i in paste0("df",1:3)){
  d=get(i)
  colnames(d)[10]=i
  assign(i,d)
}
票数 7
EN

Stack Overflow用户

发布于 2016-01-29 12:46:53

如果命令是以字符串形式给出的,那么您可以通过eval(parse(text = command))实现它。

例如,这是可能的:

代码语言:javascript
复制
eval(parse(text = 'names(df1) <- "colname"'))

为每个data.frame准备一组命令并不难。我觉得在你的情况下,

代码语言:javascript
复制
commands <- sprintf('names(df%d)[10] <- "df%d"', 1:10, 1:10)

然后,

代码语言:javascript
复制
eval(parse(text = commands))
票数 4
EN

Stack Overflow用户

发布于 2016-01-29 12:33:11

assign的文档说:

X变量名,作为字符串给出。

您尝试将它与变量名称以外的其他内容一起使用,而变量名称似乎不起作用。

我将您的问题简化为三个有三列的数据框架,以便更容易地创建示例数据。以下是数据框架:

代码语言:javascript
复制
df1 <- data.frame(a = 1:10, b = 1:10, c = 1:10)
df2 <- df1
df3 <- df1

这是更改第三列名称的循环:

代码语言:javascript
复制
for (i in paste0("df",1:3)){
   call <- bquote(names(.(as.name(i)))[3] <- i)
   eval(call)
}

我首先要做的是创建这个调用(您可以查看call,看看它是否包含实际要计算的代码行)。as.name(i)将字符i转换为变量名,.()告诉bquote将括号内的已知符号替换为它们的值。内部已知的符号是i,它将被"df1"替换,然后将字符串转换为符号。

一旦构造了调用,就会使用eval()对其进行评估。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35084427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档