Два возможных решения с использованием пакета data.table
:
# load the package and convert 'mydf' to a 'data.table'
library(data.table)
setDT(mydf)
# option 1a:
mydf[, tstrsplit(Match1, '_')
][, .(Team1 = trimws(gsub('data|events|\\.',' ',V1)),
Team2 = trimws(gsub('sites|sportsbet|h2h|\\.',' ',V2)))][]
# option 1b:
mydf[, setNames(tstrsplit(Match1, '_'), paste0('Team',1:2))
][, lapply(.SD, function(x) trimws(gsub('data|events|sites|sportsbet|h2h|\\.',' ',x)))][]
# option 2:
mydf[, tstrsplit(Match1, '_')
][, .(Team1 = lapply(strsplit(V1, '\\.'), function(x) paste(tail(x, -2), collapse = ' ')),
Team2 = lapply(strsplit(V2, '\\.'), function(x) paste(head(x, -3), collapse = ' ')))][]
Альтернативное решение в базе R:
l <- strsplit(mydf$Match1, '_')
l <- lapply(l, strsplit, split = '\\.')
l <- lapply(l, function(x) list(paste(tail(x[[1]], -2), collapse = ' '),
paste(head(x[[2]], -3), collapse = ' ')))
l <- lapply(l, as.data.frame.list, col.names = paste0('Team',1:2))
do.call(rbind, l)
которые все дают (показан data.table
-выход):
Team1 Team2
1: Brisbane Broncos Parramatta Eels
2: Melbourne Storm North Queensland Cowboys
Используемые данные:
mydf <- structure(list(Match1 = c("data.events.Brisbane.Broncos_Parramatta.Eels.sites.sportsbet.h2h",
"data.events.Melbourne.Storm_North.Queensland.Cowboys.sites.sportsbet.h2h")),
.Names = "Match1", class = "data.frame", row.names = c(NA, -2L))
person
Jaap
schedule
22.05.2018