【发布时间】:2021-05-17 20:14:23
【问题描述】:
我对创建多个数据框有疑问。下面是初始数据框。
framework <- structure(list(game_id = c(303731L, 303731L, 303731L, 303731L,
303731L, 303731L, 303731L, 303731L, 303731L, 303731L, 303731L,
303731L, 303731L, 303731L, 303731L, 303731L, 303731L, 303731L,
303731L, 303731L), home_team = c(TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE), team_name = c("Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona"), player_name = c("Antoine Griezmann",
"Sergio Busquets i Burgos", "Sergio Busquets i Burgos", "Sergio Busquets i Burgos",
"Arturo Erasmo Vidal Pardo", "Héctor Junior Firpo Adames", "Héctor Junior Firpo Adames",
"Arturo Erasmo Vidal Pardo", "Arturo Erasmo Vidal Pardo", "Jordi Alba Ramos",
"Arthur Henrique Ramos de Oliveira Melo", "Gerard Piqué Bernabéu",
"Arthur Henrique Ramos de Oliveira Melo", "Samuel Yves Umtiti",
"Clément Lenglet", "Clément Lenglet", "Gerard Piqué Bernabéu",
"Gerard Piqué Bernabéu", "Clément Lenglet", "Clément Lenglet"
), type_name = c("pass", "dribble", "dribble", "pass", "dribble",
"dribble", "pass", "dribble", "pass", "dribble", "dribble", "dribble",
"pass", "dribble", "dribble", "pass", "dribble", "pass", "dribble",
"pass"), result_name = c("success", "success", "success", "success",
"success", "success", "success", "success", "success", "success",
"success", "success", "success", "success", "success", "success",
"success", "success", "success", "success"), no_passes = c(1,
1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 8), subs = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = 77131:77150, class = "data.frame")
输出
game_id home_team team_name player_name type_name result_name no_passes subs
77131 303731 TRUE Barcelona Antoine Griezmann pass success 1 0
77132 303731 TRUE Barcelona Sergio Busquets i Burgos dribble success 1 0
77133 303731 TRUE Barcelona Sergio Busquets i Burgos dribble success 1 0
77134 303731 TRUE Barcelona Sergio Busquets i Burgos pass success 2 0
77135 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo dribble success 2 0
77136 303731 TRUE Barcelona Héctor Junior Firpo Adames dribble success 2 0
77137 303731 TRUE Barcelona Héctor Junior Firpo Adames pass success 3 0
77138 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo dribble success 3 0
77139 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo pass success 4 0
77140 303731 TRUE Barcelona Jordi Alba Ramos dribble success 4 0
77141 303731 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo dribble success 4 0
77142 303731 TRUE Barcelona Gerard Piqué Bernabéu dribble success 4 0
77143 303731 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo SUB success 5 1
77144 303731 TRUE Barcelona Samuel Yves Umtiti dribble success 5 0
77145 303731 TRUE Barcelona Clément Lenglet dribble success 5 0
77146 303731 TRUE Barcelona Clément Lenglet pass success 6 0
77147 303731 TRUE Barcelona Gerard Piqué Bernabéu dribble success 6 0
77148 303731 TRUE Barcelona Gerard Piqué Bernabéu pass success 7 0
77149 303731 TRUE Barcelona Clément Lenglet dribble success 7 0
77150 303731 TRUE Barcelona Clément Lenglet pass success 8 0
我现在想做的是对列no_passes 进行迭代,创建多个数据框。这个想法是第一个数据帧由no_passes == 1 组成,朝向no_passes == 4。
每个新数据框都应该删除第一个 no_passes 并添加下一个 no_passes 行(因此在这种情况下是第 11 个)。
因此,第二个数据框应包含no_passes == 2 和no_passes == 5 之间的所有内容
这应该迭代到最后一个 no_passes,即 8。
以下是前两个数据帧的预期输出
输出 1
game_id home_team team_name player_name type_name result_name no_passes subs
77131 303731 TRUE Barcelona Antoine Griezmann pass success 1 0
77132 303731 TRUE Barcelona Sergio Busquets i Burgos dribble success 1 0
77133 303731 TRUE Barcelona Sergio Busquets i Burgos dribble success 1 0
77134 303731 TRUE Barcelona Sergio Busquets i Burgos pass success 2 0
77135 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo dribble success 2 0
77136 303731 TRUE Barcelona Héctor Junior Firpo Adames dribble success 2 0
77137 303731 TRUE Barcelona Héctor Junior Firpo Adames pass success 3 0
77138 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo dribble success 3 0
77139 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo pass success 4 0
77140 303731 TRUE Barcelona Jordi Alba Ramos dribble success 4 0
77141 303731 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo dribble success 4 0
77142 303731 TRUE Barcelona Gerard Piqué Bernabéu dribble success 4 0
输出 2
game_id home_team team_name player_name type_name result_name no_passes subs
77134 303731 TRUE Barcelona Sergio Busquets i Burgos pass success 2 0
77135 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo dribble success 2 0
77136 303731 TRUE Barcelona Héctor Junior Firpo Adames dribble success 2 0
77137 303731 TRUE Barcelona Héctor Junior Firpo Adames pass success 3 0 1
77138 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo dribble success 3 0
77139 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo pass success 4 0
77140 303731 TRUE Barcelona Jordi Alba Ramos dribble success 4 0
77141 303731 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo dribble success 4 0
77142 303731 TRUE Barcelona Gerard Piqué Bernabéu dribble success 4 0
77143 303731 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo SUB success 5 1 1
77144 303731 TRUE Barcelona Samuel Yves Umtiti dribble success 5 0
77145 303731 TRUE Barcelona Clément Lenglet dribble success 5 0
我当前的代码如下所示,并给出以下输出:
# First, create an empty datalist.
datalist_HT <- list()
# Create the 4-pass frame (with all actions between as well) for Home team
for(j in seq_len(nrow(framework))-4){
# 1: Grab first 4 no_passes starting from j
passes_j <- framework[j:(j+4), ]
# now store each dataframe in a list
datalist_HT[[j]] <- passes_j
}
# Output
game_id home_team team_name player_name type_name result_name no_passes subs
77131 303731 TRUE Barcelona Antoine Griezmann pass success 1 0
77132 303731 TRUE Barcelona Sergio Busquets i Burgos dribble success 1 0
77133 303731 TRUE Barcelona Sergio Busquets i Burgos dribble success 1 0
77134 303731 TRUE Barcelona Sergio Busquets i Burgos pass success 2 0
77135 303731 TRUE Barcelona Arturo Erasmo Vidal Pardo dribble success 2 0
但是,我倾向于只获取前 4 个条目,而不是前 4 个 no_passes 中的所有内容。
总结
- 创建多个数据帧,每个数据帧由 4 个连续的
no_passes组成(参见输出 1 和输出 2
我希望我说得足够清楚,否则我真的不知道该怎么做。
【问题讨论】:
-
请一次问一个问题。专注于一个问题,也请展示你的尝试。
-
检查下面的答案。如果要将每个列表项转换为单独的 DF,请发表评论。然而,这取决于你的最终目标,应该是什么策略。您可以通过多种方法对原始数据进行滚动计算,而无需将其拆分为单独的数据帧。