重新建模我的数据的形状。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
这是我在这个论坛上的第一个问题。
我想重新建模我的数据集的结构。 我想将列 "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