0

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

我想重新建模我的数据集的结构。我想将“团队”列分成两列。一个是主队,一个是客队。我也想将结果分成两列。主场进球和客场进球。新列的“真实”进球前不应有零。

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吗?

4

2 回答 2

1

tidyr solution:

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

Base R solution (following this answer):

df <- data.frame(do.call(rbind, strsplit(as.character(your.df$teams), " - ")))
names(df) <- c("Home", "Away")
于 2015-02-27T16:57:57.217 回答
1

这是一种cSplitsplitstackshape包中使用的方法,它使用并返回一个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
于 2015-02-27T18:52:32.027 回答