В вашем случае, с data.table
, вы можете сделать
library(data.table)
setDT(df)
df[, `:=`(NewGeo = tstrsplit(GEO_ID, "US", fixed = TRUE)[2],
NewArea = tstrsplit(Area, " ", fixed = TRUE)[2])]
Если вы хотите их в формате нумерации c, вы можете потом сделать:
df[,c('NewGeo','NewArea') := lapply(.SD, as.numeric), .SDcols = c('NewGeo','NewArea')]
tstrsplit
- это встроенный data.table
для эффективной резки струн. У вас есть возможные варианты с stringr
(однако вы не уверены в этом)
df[, `:=`(NewGeo = stringr::str_split_fixed(GEO_ID, "US", simplify = TRUE)[,2],
NewArea = stringr::str_split_fixed(Area, " ", simplify = TRUE)[,2])]