【问题标题】:Rename a column with R用 R 重命名列
【发布时间】:2022-08-08 03:28:13
【问题描述】:

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

我对编程有点陌生,所以它可能很容易解决。

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

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

它返回给我:

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

我还在 [this post][1] 中找到了一段代码:

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

但它也返回相同的消息。

我做错了什么?

附言:。抱歉有任何拼写错误,英语不是我的主要语言。

  • 你能提供names(notas) 的输出吗?另外,可以确认notas 是一个data.frame 吗? str(notas) 的输出也很有用。
  • 这里是:code > names(notas) [1] \"Assessment Name\" \"Applicant First Name\" \"Applicant Last Name\" \"Applicant Email\" [5] \"Applicant Completed Date\ " \"Review URL\" \"Reviewer First Name\" \"Reviewer Last Name\" [9] \"Reviewer Email\" \"Assigned Competencies\" \"Reviewer 总评分\" \"Reviewer 总分(数字)\" [13] \"审稿人总体备注\" code 实际是tibble!对于那个很抱歉!
  • 这是 > str(notas) tibble [860 × 13] (S3: tbl_df/tbl/data.frame) 不幸的是,那里有很多我无法分享的个人数据。 =( ,

标签: r


【解决方案1】:

你可能想要

colnames(notas)[colnames(notas) == "Reviewer Overall Notes"] <- "Nota Final"

(@Whatif 的答案显示了如何使用数字索引执行此操作,但这样做可能更好;使用字符串而不是列索引使您的代码更易于阅读 [您可以看到什么你正在重命名]并且更健壮[以防将来列的顺序发生变化])

或者,

notas <- notas %>% dplyr::rename(`Nota Final` = `Reviewer Overall Notes`)

你在这里使用反引号,因为 tidyverse(dplyr 是其中的一部分)更喜欢将其参数作为符号而不是字符串传递。

【讨论】:

  • 有效!谢谢!有什么技巧可以让我了解更多吗?为什么要使用 colnames 两次?
  • 第一次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],您会得到相同的结果
【解决方案2】:

为什么要使用反引号?使用正常的引号。

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

这似乎很重要:

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

错误:找不到对象“b”

【讨论】:

  • 谢谢!工作!我习惯使用反引号,因为葡萄牙语有很多特殊字符,很高兴知道它可能会妨碍您。
【解决方案3】:

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

我了解到我们不应该在名称中使用空格。如果名称中有空格(它有效并被称为非句法名称:根据 Wickham Hadley 在 Advanced R 书中的描述,这是由于历史原因:

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

要了解使用 ?make.names 的语法名称的概述:

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

【讨论】:

  • 这是一个惊人的提示!肯定会使用它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 2019-08-22
  • 2015-10-21
  • 2021-11-29
  • 2021-02-09
相关资源
最近更新 更多