这是我在这个论坛上的第一个问题。
我想重新建模数据集的结构。 我想拆分专栏" 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吗?
答案 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