remove/replace 字符串中的特定单词或短语 - R
remove/replace specific words or phrases from character strings - R
我环顾四周,发现了很多类似的问题,但 none 正好回答了我的问题。我需要清理命名约定,特别是 replace/remove 来自特定 column/variable 的某些单词和短语,而不是整个数据集。我正在从 SPSS 迁移到 R,下面有一个在 SPSS 中执行此操作的代码示例,但我不确定如何在 R 中执行此操作。
EG:
"Acadia Parish" --> "Acadia"(删除 Parish 和 Parish 之前的 space)
"Fifth District" --> "Fifth"(删除 District 和 District 之前的 space)
SPSS 语法:
COMPUTE county=REPLACE(county,' Parish','').
在 32,000 个案例的列中只有少数这个问题的实例,需要的东西 replacing/removing 各不相同,案例可以重复(包含 'Parish' 的短语有几十个实例),这意味着编写需要 removed/replaced 的代码要快得多,它不像正则表达式那样简单或干净地删除所有 space、特定单词或字符之后的所有字符、所有特殊字符等。它必须包含前导 spaces.
我查看了 R 中的 replace() gsub() 和其他类似命令,但它们都涉及创建向量,或者看起来它们涉及创建向量。我想要的是查找我指定的字符的语法,它可以包括前导或尾随 spaces,并用我指定的东西替换它们,它可以什么都不包含,如果它没有找到特定的字符,大小写不变。
是的,我最终会多次重复相同的语法,创建向量可能更容易,但如果可能的话,我想获得我描述的语法,因为我还需要执行其他类似的操作嗯
感谢您的观看。
也许我遗漏了什么,但我不明白为什么你不能简单地在正则表达式中使用条件,然后 trim 去掉烦人的白色 space。
string <- c("Arcadia Parish", "Fifth District")
bad_words <- c("Parish", "District") # Write all the words you want removed here!
bad_regex <- paste(bad_words, collapse = "|")
trimws( sub(bad_regex, "", string) )
# [1] "Arcadia" "Fifth"
dataframename$varname <- gsub(" Parish","", dataframename$varname)
> x <- c("Acadia Parish", "Fifth District")
> x2 <- gsub("^(\w*).*$", "\1", x)
> x2
[1] "Acadia" "Fifth"
图例:
- ^ 模式开始。
- () 组(或代币)。
- \w* 单词字符一次或多次出现超过 1 次。
- .* 除换行符外的任意字符出现一次或多次 \n.
- $ 模式结束。
- \1 Returns 来自正则表达式的组
我环顾四周,发现了很多类似的问题,但 none 正好回答了我的问题。我需要清理命名约定,特别是 replace/remove 来自特定 column/variable 的某些单词和短语,而不是整个数据集。我正在从 SPSS 迁移到 R,下面有一个在 SPSS 中执行此操作的代码示例,但我不确定如何在 R 中执行此操作。
EG:
"Acadia Parish" --> "Acadia"(删除 Parish 和 Parish 之前的 space)
"Fifth District" --> "Fifth"(删除 District 和 District 之前的 space)
SPSS 语法:
COMPUTE county=REPLACE(county,' Parish','').
在 32,000 个案例的列中只有少数这个问题的实例,需要的东西 replacing/removing 各不相同,案例可以重复(包含 'Parish' 的短语有几十个实例),这意味着编写需要 removed/replaced 的代码要快得多,它不像正则表达式那样简单或干净地删除所有 space、特定单词或字符之后的所有字符、所有特殊字符等。它必须包含前导 spaces.
我查看了 R 中的 replace() gsub() 和其他类似命令,但它们都涉及创建向量,或者看起来它们涉及创建向量。我想要的是查找我指定的字符的语法,它可以包括前导或尾随 spaces,并用我指定的东西替换它们,它可以什么都不包含,如果它没有找到特定的字符,大小写不变。
是的,我最终会多次重复相同的语法,创建向量可能更容易,但如果可能的话,我想获得我描述的语法,因为我还需要执行其他类似的操作嗯
感谢您的观看。
也许我遗漏了什么,但我不明白为什么你不能简单地在正则表达式中使用条件,然后 trim 去掉烦人的白色 space。
string <- c("Arcadia Parish", "Fifth District")
bad_words <- c("Parish", "District") # Write all the words you want removed here!
bad_regex <- paste(bad_words, collapse = "|")
trimws( sub(bad_regex, "", string) )
# [1] "Arcadia" "Fifth"
dataframename$varname <- gsub(" Parish","", dataframename$varname)
> x <- c("Acadia Parish", "Fifth District")
> x2 <- gsub("^(\w*).*$", "\1", x)
> x2
[1] "Acadia" "Fifth"
图例:
- ^ 模式开始。
- () 组(或代币)。
- \w* 单词字符一次或多次出现超过 1 次。
- .* 除换行符外的任意字符出现一次或多次 \n.
- $ 模式结束。
- \1 Returns 来自正则表达式的组