【问题标题】:Add space between a character in R在R中的字符之间添加空格
【发布时间】:2020-08-26 08:58:12
【问题描述】:

背景

我有一个数据集,df。每当我尝试重命名“TanishaIsCool”列时,都会收到错误消息:意外字符串常量。我希望在我的列名中添加空格

TanishaIsCool   Hello
hi              hi

这就是我正在做的:

df1 <- df %>% rename(Tanisha Is Cool = `TanishaIsCool` )

期望的输出

 Tanisha Is Cool     Hello
 hi                  hi

投入

structure(list(TanishaIsCool = structure(1L, .Label = "hi", class = "factor"), 
Hello = structure(1L, .Label = "hi", class = "factor")), class = "data.frame", row.names = c(NA, 
-1L))

【问题讨论】:

  • 您需要将 ` 反引号放在包含空格的无效名称周围 - df1 &lt;- df %&gt;% rename(`Tanisha Is Cool` = TanishaIsCool) 。否则,R 解释器会将 Tanisha isCool 视为单独的语句,只是浮动在那里 - 因此有点神秘的“意外字符串常量”
  • 谢谢! thelatemail - 这也有效!

标签: r dplyr rename


【解决方案1】:

我们可以使用gsub 捕获小写字母(([a-z])),然后是大写字母(([A-Z])),在替换中,使用捕获组的反向引用(\\1,\2`)并在它们之间创造空间

colnames(df1) <- gsub("([a-z])([A-Z])", "\\1 \\2", colnames(df1))
df1
#  Tanisha Is Cool Hello
#1              hi    hi

tidyverse 和选项是

library(dplyr)
library(stringr)
library(magrittr)
df1 %<>%
    rename_all(~ str_replace_all(., "([a-z])([A-Z])", "\\1 \\2"))

对于选定的列,使用rename_at

df1 %<>%
    rename_at(1, ~ str_replace_all(., "([a-z])([A-Z])", "\\1 \\2"))

另一种选择是正则表达式环视

gsub("(?<=[a-z])(?=[A-Z])", " ", names(df1), perl = TRUE)
#[1] "Tanisha Is Cool" "Hello"   

如果我们只需要更新选定的列名,那么使用索引,它是第一列

names(df1)[1] <- gsub("(?<=[a-z])(?=[A-Z])", " ", names(df1)[1], perl = TRUE)  

【讨论】:

  • 谢谢阿克伦。我有多个列,只想在一列中添加空格。我需要指定该列吗?
  • @Lynnette 只有具有这种特定模式的列名才会受到影响。或者,如果您只想更改特定列,请选择该列,即gsub("(?&lt;=[a-z])(?=[A-Z])", " ", names(df1)[1], perl = TRUE)
  • 同一个人 - 由于有人对我的一些问题投了反对票(不知道为什么),我刚改了名字
【解决方案2】:

除了缺少反引号/反引号之外,您的尝试几乎完成了:

df1 %>% rename(`Tanisha Is Cool` = TanishaIsCool)

但是,我相信您会发现大多数建议(根据我自己在一个特定数据集上苦苦挣扎的经验,我完全同意...),声明不要在变量名中使用空格,因为您可能会发现当你必须引用这些变量,你必须总是包含 `` ,这会很麻烦。

刚刚意识到@thelatemail 在评论中已经回答了这个问题!

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多