将一列中的字符串分成两列

时间:2018-07-12 10:13:33

标签: r rstudio extract

我有一列连串字符串,例如,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列中创建“重复项”,而不会创建其他任何内容。我也没有收到错误。有什么建议可能出问题了吗?

2 个答案:

答案 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