我有一列连串字符串,例如,Affordable2008,但也可以是Brasil2012。我想创建两个新变量,一个是国家/地区变量,另一个是年份。
因为在字符串的末尾总是有数字,所以我确实知道应该从右侧而不是从左侧拆分字符串的位置。
我从以下链接开始:Splitting string variables in R
并提出:
# ES1 is name of dataset, country is name of column to be split
library(tidyr)
ES1$countryyear<-ES1$country
ES1$countryname<-ES1$country
extract(ES1, country, into = c("countryname", "countryyear"), "(\\w+)
(.*)")
这只会在country
列中创建“重复项”,而不会创建其他任何内容。我也没有收到错误。有什么建议可能出问题了吗?
答案 0 :(得分:3)
您几乎正确。正则表达式中的\w
提取字母和数字,然后剩下的就没有其他组了。您可以使用[a-zA-Z]
作为一个字母来分组字母,更准确地说,最好使用\d
来声明数字。
下面的工作解决方案:
ES1 <- data.frame(country = c("Afg2", "Den3"))
tidyr::extract(ES1, country, into = c("name", "year"), "([a-zA-Z]+)(\\d+)")
name year
1 Afg 2
2 Den 3
答案 1 :(得分:0)
您可以将tidyr::separate
的负数字索引用于sep
:
ES1 <- data.frame(country = c("Afghanistan2008", "Brasil2012"))
library(tidyr)
separate(ES1, country, into = c("countryname", "countryyear"), -5)
# countryname countryyear
# 1 Afghanistan 2008
# 2 Brasil 2012