如何更改R中数据框中的列名?

机器算法验证 r
2022-03-01 04:16:45
 names(mydat)[c(name)]<-c("newname") 

由此,我知道数据框 mydat 的列/变量名称“name”被替换为“newname”。

我的问题是,如果我想通过一个循环来做到这一点,那么我会有一些类似的东西:

newname1 newname2 newname3 newname4 等等,我该怎么做?

这就是做了,但没有奏效:

for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}

有没有办法对此进行编码?非常感谢所有可以提供帮助的人。奥乌苏·艾萨克

3个回答

最明显的解决方案是使用以下代码更改 for 循环中的代码:

   names(mydat)[c(name)] <- paste("newname",i,sep="")

但是你需要澄清你的变量name是什么。目前,此循环将对单列进行 4 次重命名。

一般来说,如果您要更改的名称在向量中,这是一个标准的子集程序:

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes

尝试使用sprintfor paste,像这样:

names(mydat)<-sprintf("name%d",1:10)

另外,请注意,这names(mydat)[c(name)]不是废话;c(name)等同于写作 justname并且意味着“获取名为 ' 的变量的值name;括号将至少提取元素,names(mydat)但前提是name变量包含数字或布尔索引。

如果要替换名为namewith的列name1, name2, ..., nameN,请使用以下内容:

names(mydat)[names(mydat)=="name"]<-sprintf("name%d",1:sum(names(mydat)=="name"))

编辑:好吧,如果您只想删除重复的列名,还有更简单的方法;R 有一个make.names功能可以解决这个问题;它可以这样使用:

names(mydat)<-make.names(names(mydat),unique=TRUE)

甚至更短,同样只能通过编写来获得:

data.frame(mydat)->mydat #The magic is in check.names, but it is TRUE by default

我有同样的问题,我用这段代码解决了它:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");