繁体   English   中英

从 R 中的字符串中删除包括“[”之后的所有内容

[英]Removing everything after and including “[” from a string in R

我正在尝试修改某些数据集的列名。 每列的命名类似于此字符串:

Patient Age [70: Age]

首先,我想删除[70:Age] ,这样我就只有Patient Age ,然后我想用下划线替换字符串中的所有空格实例。

我知道如何用gsub()用下划线替换空格,但我不知道如何在[...之后删除所有内容。

我不断收到“ invalid regular expression ”错误,因为正则表达式也需要]

如果你能帮助我正确的语法,请告诉我。

我知道下面的代码删除了标点符号,但我不希望列名中出现“70 岁”

gsub("[[:punct:]]", "", names(full_data)[1])
[1] "Patient Age 70 Age"

我建议使用

x <- "Patient Age [70: Age]"
trimws(gsub("(?:\\[[^][]*]|\\s)+", "_", x), whitespace="_")
# => [1] "Patient_Age"

这里,

  • (?:\[[^][]*]|\s)+ - 匹配一个或多个出现的
    • \[[^][]*] - 一个[ ,然后是除[]之外的任何零个或多个字符,然后是一个]字符
    • | - 或者
    • \s - 一个空格字符

请参阅正则表达式演示R 演示

匹配项替换为_ 由于结果字符串中可能有前导/尾随_ ,因此您可以使用trimws修剪它们。

或者,您可以使用嵌套sub操作:

sub("\\s", "_", sub("\\s\\[.*?\\]", "", x))

第一个sub (右侧)删除[...]表达式之前的空格以及[...]表达式本身,第二个sub (左侧)将剩余的空格替换为_

我们可以使用base R中的trimwschartr

chartr(" ", "_", trimws(x, whitespace = "\\s*\\[.*"))
#[1] "Patient_Age"

数据

x <- "Patient Age [70: Age]"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM