[英]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+ 个空格。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.