我正在对数据框列中的一系列个人名称进行一些数据清理。我想删除每个名称末尾的非字母字符。
countries <- c("Senegal1345769", "Canada&", "Austria12", "Spain-", "Russia#$")
在上面的例子中,我想把国家变成:
[1] "Senegal" "Canada" "Austria" "Spain" "Russia"
我可以将 gsub()
与字符特定模式(例如,pattern = ",$"
)一起使用,但我不太确定如何对字符串执行此操作具有多个不同的尾随非字母(例如,“Senegal1345769”
)。
将使用什么样的模式来解决这个问题?
最佳答案
您对 [^:alpha:]+$
的初步尝试几乎是正确的。您只需要记住,POSIX 字符类(如 [:alpha:]
)应该在括号表达式中使用。
使用
countries <- c("Senegal1345769", "Canada&", "Austria12", "Spain-", "Russia#$")
sub("[^[:alpha:]]+$", "", countries)
## => [1] "Senegal" "Canada" "Austria" "Spain" "Russia"
参见 online R demo .
详细信息:
[^
- 否定括号表达式的开始[:alpha:]
- 一个字母 POSIX 字符类...
]+
- 一次或多次$
- 字符串结尾。
因此,[^[:alpha:]]+$
模式匹配字符串末尾除字母以外的 1 个或多个字符。
如果这个表达式不起作用,你也可以尝试 PCRE 模式:
sub("(*UCP)\\P{L}+$", "", countries, perl=TRUE)
在这里,
(*UCP)
- 使模式识别 Unicode\\P{L}+
- 1 个或多个字母以外的字符$
- 字符串结尾。
关于从字符串末尾删除多个非字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016660/