从R中的列名末尾删除不定长度括号中的字符

Posted

技术标签:

【中文标题】从R中的列名末尾删除不定长度括号中的字符【英文标题】:removing characters in brackets of indefinite length from end of column names in R 【发布时间】:2022-01-04 05:11:28 【问题描述】:

我在 df 中有一些列名,如下所示:

column1 (-)
column2 (unwantedstring)
column3
column4 (4)

请注意,有些列的末尾没有多余的括号,应保持不变。

我想去掉最后的括号和里面的任何东西(连同左括号前的空格)来得到:

column1
column2
column3
column4

我在下面的正确轨道上吗?

df <- df %>%
  rename_with(~str_remove(.x, " \(*\)$"))

任何帮助将不胜感激

【问题讨论】:

在 R 中,您需要双重转义 - 一次用于 R,一次用于正则表达式。您还需要使用.* 而不仅仅是* 作为通配符,因此请尝试" \\(.*\\)$",尽管您可能可以简化为" \\(.*"...如果() 并不重要之后——无论如何你都想删除它,对吧? 【参考方案1】:

您可以在此处使用sub 作为基本选项:

x <- c("column1 (-)", "column2 (unwantedstring)", "column3", "column4 (4)")
output <- sub("\\s+\\(.*\\)$", "", x)
output

[1] "column1" "column2" "column3" "column4"

【讨论】:

【参考方案2】:

您也可以使用以下解决方案,但是有点复杂。

trimws(regmatches(x, regexpr("\\([^()]\\](SKIP*)(FAIL*)|(?<!\\()[^()]*(?!\\))", x, perl = TRUE)))

[1] "column1" "column2" "column3" "column4"

感谢Tim Biegeleisen提供的数据

【讨论】:

以上是关于从R中的列名末尾删除不定长度括号中的字符的主要内容,如果未能解决你的问题,请参考以下文章

删除没有内容的字符串中的括号

删除R中数据框中所有列名的前两个字符

如何从列表中的字符串末尾删除 '\n'? [复制]

从字符串中删除括号

R:从R中的大型数据集中根据列中的值删除行[重复]

如何从R数据框中的列名中删除不必要的单引号(')?