重新建模我的数据的形状。frame/excel 电子表格

Re-model the shape of my data.frame/excel spreadsheet

这是我在这个论坛上的第一个问题。

我想重新建模我的数据集的结构。 我想将列 "Teams" 分成两列。一个是主队,另一个是客队。 我还想将结果分成两列。主场进球和客场进球。新列的 "real" 进球数不应为零。

之前

Date        Time    Teams               Results Homewin Draw    Awaywin
18 May      19:45   AC Milan - Sassuolo 02:01   1.26    6.22    10.47
18 May      19:45   Chievo - Inter      02:01   3.73    3.42    2.05
18 May      19:45   Fiorentina - Torino 02:02   2.84    3.58    2.39

之后

Date Time Hometeam Awayteam Homegoals Awaygoals Homewin Draw    Awaywin
18 May  19:45   AC Milan    Sassuolo    2   1   1.26    6.22    10.47
18 May  19:45   Chievo      Inter       2   1   3.73    3.42    2.05
18 May  19:45   Fiorentina  Torino      2   2   2.84    3.58    2.39

R 能帮我解决这个问题吗?我需要哪些包裹? 我希望能够为许多 excel 具有不同联赛和分区但结构相同的电子表格执行此操作。

有人可以帮助我和我的 data.frame 吗?

tidyr 解法:

separate(your.data.frame, Teams, c('Home', 'Away'), sep = " - ")

Base R 解决方案(在 this answer 之后):

df <- data.frame(do.call(rbind, strsplit(as.character(your.df$teams), " - ")))
names(df) <- c("Home", "Away")

这是一种使用 splitstackshape 包中的 cSplit 的方法,它使用 returns 和 data.table。假设您的原始数据框名为 df

library(splitstackshape)

setnames(
    cSplit(df, 3:4, c(" - ", ":"))[, c(1:2, 6:9, 3:5), with = FALSE], 
    3:6, 
    paste0(c("Home", "Away"), rep(c("Team", "Goals"), each = 2))
)[]
#      Date  Time   HomeTeam AwayTeam HomeGoals AwayGoals Homewin Draw Awaywin
# 1: 18 May 19:45   AC Milan Sassuolo         2         1    1.26 6.22   10.47
# 2: 18 May 19:45     Chievo    Inter         2         1    3.73 3.42    2.05
# 3: 18 May 19:45 Fiorentina   Torino         2         2    2.84 3.58    2.39