重新建模data.frame / excel电子表格的形状

时间:2015-02-27 16:43:20

标签: r dataframe structure gsub stringr

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

我想重新建模数据集的结构。 我想拆分专栏" Teams"分为两列。一个与家庭团队和另一个与远足队。 我还想将结果分成两列。 Homegoals和Awaygoals。新列不应该在"真正的"进球得分。

BEFORE

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

AFTER

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

我可以为我解决这个问题吗?我需要哪些包裹? 我希望能够为许多具有不同联盟和部门的excel电子表格执行此操作,但所有这些都具有相同的结构。

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

2 个答案:

答案 0 :(得分:1)

tidyr解决方案:

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

基础R解决方案(this answer之后):

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

答案 1 :(得分:1)

这是一种使用cSplit包中splitstackshape的方法,该方法使用并返回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