R 使用右边的四个字符拆分列
我想把一列一分为二。我想选择正确的4个数字,并使其成为自己的列。例如,我有一个列带有R 使用右边的四个字符拆分列,r,R,我想把一列一分为二。我想选择正确的4个数字,并使其成为自己的列。例如,我有一个列带有“纽约2014”,我想创建两个新列,分别带有“纽约”和“2014” 请注意,我不能简单地在“上划界,因为其他一些观察没有空格或多个空格。假设您的列是data$V1 require(stringr) data$V2 = str_sub(data$V1, 1, -5) data$V3 = str_sub(data$V1, -4, -1) 使用data.table和gsub library(data.table) i
“纽约2014”
,我想创建两个新列,分别带有“纽约”
和“2014”
请注意,我不能简单地在
“
上划界,因为其他一些观察没有空格或多个空格。假设您的列是data$V1
require(stringr)
data$V2 = str_sub(data$V1, 1, -5)
data$V3 = str_sub(data$V1, -4, -1)
使用
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
不要使用
:=
如果您不想保留列x
我们可以使用tstrsplit
fromdata.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
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
或者,
base R
选项是使用sub
在城市和年份之间创建一个分隔符,然后使用read.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
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查看?substr
和?nchar