从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中的列名末尾删除不定长度括号中的字符的主要内容,如果未能解决你的问题,请参考以下文章