我想将一个专栏分成两部分。我想采取正确的4个数字,并使其成为自己的列。例如 - 我有一个"New York 2014"
的列,我希望使用"New York"
和"2014"
创建两个新列。
请注意,我不能简单地在" "
上分隔,因为其他一些观察结果没有空格或多个空格。
答案 0 :(得分:0)
假设您的列是数据$ V1
require(stringr)
data$V2 = str_sub(data$V1, 1, -5)
data$V3 = str_sub(data$V1, -4, -1)
答案 1 :(得分:0)
使用scalac
和data.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")