如何在R中的关键字前添加逗号?

How to add a comma before keywords in R?

提问人:Antonio 提问时间:9/23/2023 更新时间:10/4/2023 访问量:70

问:

我目前有一个城市的数据帧/向量,其末尾的单词以以下任何一项开头:Util、Municipal、Police、Water 或末尾的 #。

如何从:

山坳
假市法院
假装水务公司市
非真实市警察局
欺诈山实用程序
El Imagined 第 344 地方法院

对此:

山坳
德克萨斯州法克市法院
德克萨斯州假装市自来水公司
德克萨斯州非真实之城警察局
德克萨斯州欺诈山公用事业公司
德克萨斯州埃尔想象第 344 地方法院

我目前的代码是:

DATA %>%
  mutate(col = str_replace(col, "(?i)(?>=(UTIL | MUNICIPAL | Police | Water | ^([0-9]+)")),?\\s", ", TX"))

我认为每个关键字都正确包含在此表达式中。我绝对不确定的是,我是否弄错了数字。

R 正则表达式 数据操作

评论

0赞 Antonio 9/23/2023
更正:我的关键字也不正确。
2赞 Wiktor Stribiżew 9/23/2023
尝试(?i)\\s*\\b(util(?:ity)?|MUNICIPAL|Police|Water|[0-9]+(?:st|[rn]d|th)?)(?:,?\\s)?
0赞 Antonio 9/27/2023
@WiktorStribiżew 这奏效了!我将“ity”更改为“ities”。但是,您介意解释一下util(?:ity)在做什么吗?

答:

0赞 Wiktor Stribiżew 9/27/2023 #1

你可以使用

x <- c("City of Fake Municipal Court", "City of Pretend Water Utility","City of Not Real Police Department","Fraud Hill Utility","El Imagined 344th District Court")
regex <- "(?i)\\s*\\b(util(?:it(?:y|ies))?|MUNICIPAL|Police|Water|[0-9]+(?:st|[rn]d|th)?)(?:,?\\s)?"
trimws(sub(regex, ", TX ", x, perl=TRUE))

请参阅正则表达式演示R 演示。注意将仅替换第一个匹配项,并且是 PCRE 模式使用所必需的。subperl=TRUEsub

图案细节

  • (?i)- 模式不区分大小写
  • \s*- 零个或多个空格
  • \b- 单词边界
  • (util(?:it(?:y|ies))?|MUNICIPAL|Police|Water|[0-9]+(?:st|[rn]d|th)?)- 第 1 组:要么后跟一个可选,后跟 or 、 、 或 或 ,要么后跟一个或多个数字,后跟 ,或者 ,或者 ,或者utilityiesMUNICIPALPoliceWaterstrndth
  • (?:,?\s)?- 一个可选的非捕获组,匹配一个或零个可选逗号,然后是一个空格字符。
0赞 Umar 10/4/2023 #2
library(dplyr)
# Create a dataframe with the given data
df <- data.frame(
  Col = c(
    "City of Fake Municipal Court",
    "City of Pretend Water Utility",
    "City of Not Real Police Department",
    "Fraud Hill Utility",
    "El Imagined 344th District Court"
  )
)
# Define a regular expression pattern
regex_pattern <- "(?i)\\b(util(?:it(?:y|ies))?|MUNICIPAL|Police|Water|[0-9]+(?:st|[rn]d|th)?)(?:,?\\s)?"

# Use mutate to modify the Col column
df <- df %>%
  mutate(Col = str_replace_all(Col, regex_pattern, ", TX \\1"))

# Display the modified dataframe
print(df)

修改后的数据框架将给出为

Col
1       City of Fake , TX MunicipalCourt
2 City of Pretend , TX Water, TX Utility
3 City of Not Real , TX PoliceDepartment
4                Fraud Hill , TX Utility
5   El Imagined , TX 344thDistrict Court
  1. (?i) 使正则表达式不区分大小写,因此它匹配 关键字的大写和小写变体。
  2. \b 匹配一个词边界,确保我们只匹配整个 的话。
  3. util(?:it(?:y|ies))?匹配“util”的变体,包括“utility”和“utilities”(如果存在)。
  4. |是交替运算符,允许我们匹配任何 指定的关键字。
  5. 警察|水与“警察”或“水”相匹配。[0-9]+(?:st|[rn]d|th)?匹配可能带有“st”、“nd”或“th”后缀的数字(例如,“344th”)。
  6. (?:,?\s)?匹配可选逗号,后跟可选的 whitespa