r - 使用gsub在R中用破折号分隔短语中的中间词
问题描述
我有以下内容:
x <- c("Sao Paulo - Paulista - SP", "Minas Gerais - Mineiro - MG", "Rio de Janeiro - Carioca -RJ")
我想保留“Paulista”、“Mineiro”、“Carioca”
我正在尝试 gsub
y <- gsub("\\$-*","",x)
但不工作。
解决方案
两种快速方法:
x<- c(" Sao Paulo - Paulista - SP", "Minas Gerais - Mineiro - MG", "Rio de Janeiro - Carioca -RJ")
这首先是标准sub
解决方案;如果有没有连字符的字符串,它将返回未修改的完整字符串。
trimws(sub("^[^-]*-([^-]*)-.*$", "\\1", x))
# [1] "Paulista" "Mineiro" "Carioca"
内sub
:
"^[^-]*-([^-]*)-.*$"
^ beginning of each string, avoids mid-string matches
[^-]* matches 0 or more non-hyphen characters
- literal hyphen
([^-]*) matches and stores 0 or more non-hyphen charactesr
- literal hyphen
.* 0 or more of anything (incl hyphens)
5 end of each string
"\\1" replace everything that matches with the stored substring
下一个通过将字符串拆分"-"
为 a来工作list
,然后为第二个元素编制索引。如果有没有连字符的字符串,这将与subscript out of bounds
.
trimws(sapply(strsplit(x, "-"), `[[`, 2))
# [1] "Paulista" "Mineiro" "Carioca"
示例调用strsplit
:
strsplit(x[[1]], "-")
# [[1]]
# [1] " Sao Paulo " " Paulista " " SP"
...所以第二个元素是Paulista
(带有额外的前导/尾随空格)。周围sapply
总是抓取第二个元素(这是字符串不匹配时的错误)。
两种解决方案都trimws
用于减少前导和尾随空格。
推荐阅读
- c# - asp.net MVC 中的会话结束处理问题
- python - 当我尝试在for循环中对字符串进行切片时,我不断收到类型错误“只能将str(而不是“int”)连接到str,我该如何解决?
- angular - Angular 没有运行变更检测
- javascript - 为什么我的 LED 灯开始闪烁,即使一开始没有闪烁?Micro:bit JavaScript
- swift - 使用 swinject 注册具有关联类型的协议时出现问题
- tensorflow - Tensorflow - Saved_model_cli.py - (在 VSCode 中使用 Code Runner 编译时出现 ModuleNotFoundError)
- mysql - 我该如何解决这个错误:LOAD DATA INFILE 语法错误?
- c++ - 使用带有迭代器的 std::conditional
- python - Discord.py 知道用户是否存在于服务器中
- elasticsearch - Security-exception-action-[indices:admin/settings/update] 在索引 [apm-7.6.0-error-000001] 上的用户 [kibana] 未经授权