采用正确的四个字符拆分列

时间:2016-02-26 02:18:57

标签: r

我想将一个专栏分成两部分。我想采取正确的4个数字,并使其成为自己的列。例如 - 我有一个"New York 2014"的列,我希望使用"New York""2014"创建两个新列。

请注意,我不能简单地在" "上分隔,因为其他一些观察结果没有空格或多个空格。

3 个答案:

答案 0 :(得分:0)

假设您的列是数据$ V1

require(stringr)
data$V2 = str_sub(data$V1, 1, -5)
data$V3 = str_sub(data$V1, -4, -1)

答案 1 :(得分:0)

使用scalacdata.table

gsub

如果您不想保留专栏library(data.table) info = data.table( x = c( "New York 2014", "New York 2015", "New York 2016", "Fargo 2014", "Fargo 2015", "Fargo 2016", "San Francisco 2014", "San Francisco 2015", "San Francisco 2016" ) ) ## info[ , c('city','year'):=list( gsub('(\\D+)\\s+(\\d+)','\\1',x), gsub('(\\D+)\\s+(\\d+)','\\2',x) )] > info x city year 1: New York 2014 New York 2014 2: New York 2015 New York 2015 3: New York 2016 New York 2016 4: Fargo 2014 Fargo 2014 5: Fargo 2015 Fargo 2015 6: Fargo 2016 Fargo 2016 7: San Francisco 2014 San Francisco 2014 8: San Francisco 2015 San Francisco 2015 9: San Francisco 2016 San Francisco 2016 ,请不要使用:=

答案 2 :(得分:0)

我们可以使用tstrsplit

中的data.table
library(data.table)
setDT(df)[, setNames(tstrsplit(x, '\\s(?=\\d{4}$)', 
             perl=TRUE), c('City', 'Year'))]
#               City Year
#1:         New York 2014
#2:          Houston 2012
#3: Lake Havasu City 2016

或者base R选项是使用sub在城市和年份之间创建分隔符,然后使用read.table

阅读
read.table(text=sub('(\\D+)\\s(\\d+)', '\\1,\\2', 
     df$x),sep=",", header=FALSE, stringsAsFactors=FALSE, 
        col.names=c('City', 'Year'))
#              City Year
#1         New York 2014
#2          Houston 2012
#3 Lake Havasu City 2016

数据

df <- structure(list(x = structure(c(3L, 1L, 2L), 
 .Label = c("Houston 2012", 
"Lake Havasu City 2016", "New York 2014"), 
class = "factor")), .Names = "x", row.names = c(NA, 
-3L), class = "data.frame")