如何在R的数据框中更改列名?[关闭]


9
 names(mydat)[c(name)]<-c("newname") 

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

我的问题是,是否要通过循环执行此操作,以便获得诸如以下的信息:

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

这是起作用的,但没有起作用:

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

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


4
这个问题似乎离题,因为它纯粹是关于编程的。
gung-恢复莫妮卡

如果您需要重命名一些丑陋的变量名(例如abcde_1_1,abcde_2_2,abcde_3_3 ...),因为从Qualtrics下载的某些数据集中经常发生这种情况: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
JetLag

Answers:


10

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

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

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

通常,如果要更改的名称是矢量,这是一个标准的子设置过程:

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

您好Mpiktas,您的解决方案效果很好。非常感谢。还要感谢所有人
儿子

1
@Owusu,在此站点中表示感谢,这是对答案及其接受度的认可。参见常见问题解答。无论哪种方式,都乐于提供帮助。
mpiktas,2011年

6

尝试使用sprintfpaste,如下所示:

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

另外,请注意,names(mydat)[c(name)]几乎是胡说八道;c(name)等效于写just name和意思是“获取名为name' 的变量的值;括号至少会提取的元素,names(mydat)但前提是name变量具有数字或布尔值索引。

如果您想更换叫列namename1, 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

@mbq,==是否对字符串进行部分匹配?
mpiktas 2011年

@mpiktas不,但是这里只需要完全匹配。grepl可以做更一般的工作。

@mbq,是的,但是假设有多个具有相同名称的列。R允许这样做,但我尝试避免使用此功能。
mpiktas,2011年

@mpiktas显然,OP也是如此,因此是这个问题。

@mbq感谢您澄清与names(mydat)[c(name)]的混淆。由于OP已编写,因此我知道列/变量名称“ name”就像“哇,这可能吗?” 并试图通过名称访问名称...愚蠢的我;)。我可以谦虚地建议编辑问题吗?
steffen 2011年

5

我遇到了同样的问题,并使用以下代码解决了该问题:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.