r - 删除 R 数据框中的值中的模式
问题描述
在下面的数据框中,我想删除以下内容:
- “ 和 ”
- “和”
- “,美联储。Sts。”
- “, 共和国”
- “大不列颠及北爱尔兰”
d <- data.frame(LOCATION = c("Antigua and Barbuda",
"Bosnia and Herzegovina",
"Central Europe and the Baltics",
"Micronesia, Fed. Sts.",
"South Sudan, Republic of",
"United Kingdom of Great Britain and Northern Ireland"))
我会使用直接将“Antigua and Barbuda”更改为“AntiguaBarbuda”
d$LOCATION[d$LOCATION == "Antigua and Barbuda"] <- "AntiguaBarbuda"
但是我有一个包含许多不同值的大型数据集,这些值展示了这些模式,并且我希望能够在可能的情况下一步从变量中的所有值中删除这些模式,而不是根据具体情况逐个删除。
提前谢谢了!
解决方案
d
从问题中使用,gsub
如图所示:
pats <- c(" and ", " and the ", ", Fed. Sts.", ", Republic of",
" of Great Britain and Northern Ireland")
pat <- paste(pats, collapse = "|") # combine into single pattern
transform(d, LOCATION = gsub(pat, "", LOCATION))
给予:
LOCATION
1 AntiguaBarbuda
2 BosniaHerzegovina
3 Central EuropeBaltics
4 Micronesia
5 South Sudan
6 United Kingdom
命令
请注意,我们没有对要匹配的字符串重新排序。事实上,只要使用默认的 R 正则表达式引擎,对要匹配的字符串进行重新排序是没有意义的。我们将在本节的其余部分对此进行解释。
您可能会认为(或者至少我是这么认为的)正则表达式急切地工作,因此即使较长的匹配后面跟着较短的匹配作为前缀,它也会在一系列替代方案中采用最左边的匹配,但事实证明那是在 R 中并非如此。这有时被称为正则表达式导向与文本导向正则表达式,似乎 R 中的默认正则表达式引擎是文本导向的。例如,ab
即使严格的从左到右的急切匹配过程将被删除,下面也会被删除a
,因此ab
不匹配。
gsub("a|ab", "", "xabcy") # text oriented
## [1] "xcy"
但是,如果我们使用 perl 引擎,那么它是正则表达式导向的,并且会进行从左到右的急切匹配。
gsub("a|ab", "", "xabcy", perl = TRUE) # regex oriented
## [1] "xbcy"
推荐阅读
- macos - macOS Terminal.app 的最后一个窗口状态存储在磁盘上的什么位置?
- python - 计算 ISO 8601 的日期时间差
- python - 如何在 Flask-admin 中显示版本化数据(SQLAlchemy-Continuum)
- git - 我可以只从 github 克隆元数据/版本跟踪文件夹吗
- css - 没有内容的 TD, TH 在 Internet Explorer 中始终为 0 高度
- apache-spark - Spark合并每个分区中的对象数量
- python - 为什么 x 间距与 tkinter 窗口中的 y 间距不同?
- c# - Domino 对象 COMException:“内存不足”
- deepsecurity - 租户创建错误 - 区域设置不能为空
- asp.net - PostLogoutRedirectUri 在带有 SPA 的身份服务器 4 中始终为空(Angular 7 OIDC 客户端)