R - 根据模式和条件删除字符串列中的子字符串
R - removing substring in column of strings based on pattern and condition
我在数据框中有一列字符串,我想在其中替换值以仅包含第一个 " ("
之前的子字符串,即第一个 space/open 括号对之前的子字符串。并非所有字符串都包含括号,我希望它们保持原样。
示例数据:
col1 <- c(1, 2, 3, 4)
col2 <- c("a b (ABC DE)", "bcd", "cd ef (CE)", "bcd")
df <- data.frame(col1, col2)
df
输出:
col1 col2
1 1 a b (ABC DE)
2 2 bcd
3 3 cd ef (CE)
4 4 bcd
我正在寻找的输出是这样的:
col1 <- c(1, 2, 3, 4)
col2 <- c("a b", "bcd", "cd ef", "bcd")
df <- data.frame(col1, col2)
df
输出:
col1 col2
1 1 a b
2 2 bcd
3 3 cd ef
4 4 bcd
实际数据框有 40000 多行,字符串有很多可能的值,所以不能像示例中那样手动完成。我对使用 regex/patterns 完全没有信心,但接受这可能是最直接的方法。
这里有一个dplyr
方法
library(dplyr)
library(stringr)
df %>%
mutate(col2 = str_replace_all(col2, "\(.+?\)", ""))
其中 returns df
:
col1 col2
1 1 a b
2 2 bcd
3 3 cd ef
4 4 bcd
我宁愿使用正则表达式也不愿使用子字符串。
transform(df, col2=gsub('\s+\(.*', '', x))
# col1 col2
# 1 1 ab
# 2 2 bcd
# 3 3 cedf
# 4 4 bcd
可能的解决方案,基于stringr
:
library(tidyverse)
df %>%
mutate(col2 = str_remove_all(col2, "\s*\(.*\)\s*"))
#> col1 col2
#> 1 1 a b
#> 2 2 bcd
#> 3 3 cd ef
#> 4 4 bcd
使用 R 基础 gsub
> df$col2 <- gsub("\s*\(.*\)", "", df$col2)
> df
col1 col2
1 1 a b
2 2 bcd
3 3 cd ef
4 4 bcd
我在数据框中有一列字符串,我想在其中替换值以仅包含第一个 " ("
之前的子字符串,即第一个 space/open 括号对之前的子字符串。并非所有字符串都包含括号,我希望它们保持原样。
示例数据:
col1 <- c(1, 2, 3, 4)
col2 <- c("a b (ABC DE)", "bcd", "cd ef (CE)", "bcd")
df <- data.frame(col1, col2)
df
输出:
col1 col2
1 1 a b (ABC DE)
2 2 bcd
3 3 cd ef (CE)
4 4 bcd
我正在寻找的输出是这样的:
col1 <- c(1, 2, 3, 4)
col2 <- c("a b", "bcd", "cd ef", "bcd")
df <- data.frame(col1, col2)
df
输出:
col1 col2
1 1 a b
2 2 bcd
3 3 cd ef
4 4 bcd
实际数据框有 40000 多行,字符串有很多可能的值,所以不能像示例中那样手动完成。我对使用 regex/patterns 完全没有信心,但接受这可能是最直接的方法。
这里有一个dplyr
方法
library(dplyr)
library(stringr)
df %>%
mutate(col2 = str_replace_all(col2, "\(.+?\)", ""))
其中 returns df
:
col1 col2
1 1 a b
2 2 bcd
3 3 cd ef
4 4 bcd
我宁愿使用正则表达式也不愿使用子字符串。
transform(df, col2=gsub('\s+\(.*', '', x))
# col1 col2
# 1 1 ab
# 2 2 bcd
# 3 3 cedf
# 4 4 bcd
可能的解决方案,基于stringr
:
library(tidyverse)
df %>%
mutate(col2 = str_remove_all(col2, "\s*\(.*\)\s*"))
#> col1 col2
#> 1 1 a b
#> 2 2 bcd
#> 3 3 cd ef
#> 4 4 bcd
使用 R 基础 gsub
> df$col2 <- gsub("\s*\(.*\)", "", df$col2)
> df
col1 col2
1 1 a b
2 2 bcd
3 3 cd ef
4 4 bcd