使用R重命名列。

5

我正在尝试使用 colnames 函数在 R 脚本中重命名特定列,但迄今为止没有成功。

我在编程方面比较新手,所以可能是一些简单的问题。

基本上,我正在尝试在名为 notas 的数据框中将名为 Reviewer Overall Notes 的列重命名为 Nota Final,代码如下:

colnames(notas$`Reviewer Overall Notes`) <- `Nota Final`

它返回给我:

> colnames(notas$`Reviewer Overall Notes`) <- `Nota Final`
Error: object 'Nota Final' not found

我在[这篇文章][1]中也找到了一个代码:

colnames(notas) [13] <- `Nota Final`

但它也返回了相同的消息。

我做错了什么?

附注:抱歉如果有任何拼写错误,英语不是我的母语。


你能提供 names(notas) 的输出吗?另外,你能确认 notas 是一个数据框吗?str(notas) 的输出也会很有用。 - Adam Quek
这里是代码:
names(notas) [1] "评估名称" "申请人名字" "申请人姓氏" "申请人电子邮件"
[5] "申请人完成日期" "审查网址" "审查者名字" "审查者姓氏"
[9] "审查者电子邮件" "分配的能力" "审查者整体评级" "审查者整体得分(数字)" [13] "审查者整体注释"
而且它实际上是一个tibble!对此我很抱歉!
- Lucas Correa
这是 > str(notas) tibble [860 × 13] (S3: tbl_df/tbl/data.frame)不幸的是,那里有很多我不能分享的个人数据。 =( - Lucas Correa
3个回答

7
您可能需要:
colnames(notas)[colnames(notas) == "Reviewer Overall Notes"] <- "Nota Final"

(@Whatif的回答展示了如何使用数字索引来实现,但更好的做法是使用字符串而非列索引进行操作,这样可以使您的代码更易于阅读[您可以看到您正在重命名什么],并且更加鲁棒[以防列的顺序在未来发生改变])。
或者,
notas <- notas %>% dplyr::rename(`Nota Final` = `Reviewer Overall Notes`)

在这里你需要使用反引号`,因为tidyverse(其中包括dplyr)更喜欢将参数作为符号而不是字符串进行传递。


成功了!谢谢!有什么提示可以让我学到更多关于它的知识吗?为什么要两次使用colnames? - Lucas Correa
2
第一次 colnames(notas) 是指您要更改的对象的名称。第二个用法(在方括号内)是一个逻辑测试 colnames(notas) == "Reviewer Overall Notes",它将在一个位置返回TRUE,在其他位置返回FALSE。您可以通过键入 my_var = c(1,2,3,4) 并检查 my_var[c(FALSE, FALSE, TRUE, FALSE)] 返回什么来探索此行为。如果您键入 my_var[my_var == 3],则会得到相同的结果。 - duncanw

4

为什么要使用反引号?使用普通的引号即可。

colnames(notas)[13] <- 'Nota Final'

这似乎很重要:

df <- data.frame(a = 1:4)
colnames(df)[1] <- `b`

错误:对象 'b' 未找到


谢谢!成功了!我习惯使用反引号,因为葡萄牙语有很多特殊字符,很高兴知道这可能会有所帮助。 - Lucas Correa

2

在命名时不应使用单引号或双引号:

我了解到,在命名时不应该使用空格。如果名称中有空格(它可以运行并被称为非语法名称:根据Wickham Hadley在《Advanced R》书中的描述,这是由于历史原因造成的:

“您还可以使用单引号或双引号(例如“ _abc”<-1)创建非语法绑定,而不是使用反引号,但您不应该这样做,因为您将不得不使用不同的语法来检索值。在R支持反引号之前,使用字符串作为赋值箭头左侧的能力是一种历史文物。”

要了解什么是语法名称,请使用?make.names进行概述:

make.names("Nota Final")
[1] "Nota.Final"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接