繁体   English   中英

R中多个符号之前的gsub字符串

[英]gsub string before multiple symbols together in R

我正在尝试在 R 中一起在一列中的多个符号之前 gsub 字符串。让我用一个例子来解释

data <- data.frame(c("1_a-b","2: b-c","3_c-d"))
colnames(data) <- "ABC"

我希望最终的数据集看起来像:

data <- data.frame(c("a-b","b-c","c-d"))
colnames(data) <- "ABC"

我正在这样做:

if(any(grepl(":|_", data$ABC))){
      data$ABC <- gsub(".*_", "", data$ABC)
    } 

我尝试使用管道“|” 添加另一个条件,如:

if(any(grepl(":|_", data$ABC))){
      data$ABC <- gsub(".*_"|".*:", "", data$ABC)
    } 

但它不起作用。 有没有办法一步到位。 另外,我必须检查该列是否有这些符号,因此 grepl.

如果您需要删除最后一个_:您可以使用以下正则表达式:

sub(".*[_:]\\s*", "", data$ABC)

或者,如果您需要删除最多第一个_:

sub(".*?[_:]\\s*", "", data$ABC)

图案详情

  • .*? - 任何 0+ 个字符,尽可能少( .*尽可能多地匹配 0 个或更多字符)
  • [_:] - _:
  • \\s* - 0+ 个空格。

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

data <- data.frame(c("1_a-b","2: b-c","3_c-d"))
colnames(data) <- "ABC"
if(any(grepl(":|_", data$ABC))){
   data$ABC <- sub(".*[_:]\\s*", "", data$ABC)
} 

data输出:

  ABC
1 a-b
2 b-c
3 c-d

这个怎么样,使用stringr包?

library(stringr)
df %>% 
  mutate(
    ABC = as.character(ABC),
    new = if_else(
      str_detect(ABC, "\\w\\-\\w"),
      str_extract(ABC, "\\w\\-\\w"),
      ABC
    )
  )

     ABC new
1  1_a-b a-b
2 2: b-c b-c
3  3_c-d c-d

更改为包含 if-else 语句 - 错过了您有兴趣检查该序列的信息。

暂无
暂无

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

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