我正在对数据框列中的一系列单个名称进行一些数据清理。我想删除每个名称末尾的非字母字符。
countries <- c("Senegal1345769", "Canada&", "Austria12", "Spain-", "Russia#$")
在上述情况中,我希望将国家/地区变为:
[1] "Senegal" "Canada" "Austria" "Spain" "Russia"
我可以将gsub()
用于特定字符的模式(例如,pattern = ",$"
),但我不太确定如何为具有多个变化的尾随非alpha的字符串执行此操作(例如, "Senegal1345769"
)。
将使用什么样的模式来解决这个问题?
答案 0 :(得分:1)
您对[^: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个或多个字符$
- 字符串结束。