如何提取数据框country列中每个单元格的最后一个国家(支持多词国家名称)
提取单元格中的最后一个国家名称
我明白你的需求啦——要从每个包含多个国家(部分是带空格的双词名称)的单元格里,精准取出最后一个国家,还不想用拆分多列这种繁琐的方法。这里给你两个简洁高效的R语言解决方案,都能完美实现你的需求:
方法一:用正则表达式快速提取(推荐)
借助stringr包的str_extract函数,用正则匹配直接定位最后一个国家:
首先先构造示例数据(方便你测试):
df <- data.frame( country = c("Russia Russia", "USA UK, USA", "South Korea South Korea") )
然后加载stringr包并执行提取:
library(stringr) # 提取最后一个逗号之后的所有内容(无逗号则取整串) df$last_country <- str_extract(df$country, "[^,]+$")
执行后查看结果:
df # country last_country # 1 Russia Russia Russia Russia # 2 USA UK, USA USA # 3 South Korea South Korea South Korea South Korea
正则说明
[^,]+$的意思是:
[^,]+:匹配任意非逗号的字符(包括空格,所以双词国家名不会被拆分)$:锚定到字符串末尾,确保取的是最后一段内容
方法二:拆分后取最后元素
如果你更习惯用拆分的思路,可以用str_split拆分后取每个列表的最后一项:
library(stringr) # 按", "拆分每个字符串,然后取最后一个元素 df$last_country <- sapply(str_split(df$country, ", "), tail, n = 1)
这个方法同样能得到和上面一致的结果,而且不管单元格里有多少个国家(哪怕超过3个)都能自动适配,比你之前用separate手动指定列数灵活太多啦。
内容的提问来源于stack exchange,提问作者Serena
相关产品推荐
相关产品推荐

