Вы можете попробовать strsplit
или data.table::tstrsplit
(strsplit
+ transpose
):
> x <- 'Potomac, MD 20854\n(39.038266, -77.203413)'
> data.table::tstrsplit(x, ', |\\n\\(|\\)')
[[1]]
[1] "Potomac"
[[2]]
[1] "MD 20854"
[[3]]
[1] "39.038266"
[[4]]
[1] "-77.203413"
В общем, вы можете сделать это:
library(data.table)
df[c('city', 'state', 'lat', 'long')] <- tstrsplit(df$location1, ', |\\n\\(|\\)')
Шаблон ', |\\n\\(|\\)'
говорит tstrsplit
разделить на ", "
, "\n("
или ")"
.
Если вы хотите разделить состояние, а имена zip и cite могут содержать пробелы, вы можете попробовать выполнить два действия:
# original split (keep city names with space intact)
df[c('city', 'state', 'lat', 'long')] <- tstrsplit(df$location1, ', |\\n\\(|\\)')
# split state and zip
df[c('state', 'zip')] <- tstrsplit(df$state, ' ')