【问题标题】:iteration that creates dataframe from 1:nth value, then deletes the first value and adds the next value in line从 1:nth 值创建数据帧的迭代,然后删除第一个值并在行中添加下一个值
【发布时间】: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 == 2no_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,请发表评论。然而,这取决于你的最终目标,应该是什么策略。您可以通过多种方法对原始数据进行滚动计算,而无需将其拆分为单独的数据帧。

标签: r dataframe seq


【解决方案1】:

slider 在这些情况下很有帮助

library(tidyverse)
library(slider)

framework %>% group_by(no_passes) %>%
  nest() %>%
  slide(~.x %>% unnest(data), .after = 3, .complete = T) %>%
  subset(map(., length) > 0)

[[1]]
# A tibble: 12 x 8
# Groups:   no_passes [4]
   no_passes game_id home_team team_name player_name                            type_name result_name  subs
       <dbl>   <int> <lgl>     <chr>     <chr>                                  <chr>     <chr>       <dbl>
 1         1  303731 TRUE      Barcelona Antoine Griezmann                      pass      success         0
 2         1  303731 TRUE      Barcelona Sergio Busquets i Burgos               dribble   success         0
 3         1  303731 TRUE      Barcelona Sergio Busquets i Burgos               dribble   success         0
 4         2  303731 TRUE      Barcelona Sergio Busquets i Burgos               pass      success         0
 5         2  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              dribble   success         0
 6         2  303731 TRUE      Barcelona Héctor Junior Firpo Adames             dribble   success         0
 7         3  303731 TRUE      Barcelona Héctor Junior Firpo Adames             pass      success         0
 8         3  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              dribble   success         0
 9         4  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              pass      success         0
10         4  303731 TRUE      Barcelona Jordi Alba Ramos                       dribble   success         0
11         4  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo dribble   success         0
12         4  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  dribble   success         0

[[2]]
# A tibble: 12 x 8
# Groups:   no_passes [4]
   no_passes game_id home_team team_name player_name                            type_name result_name  subs
       <dbl>   <int> <lgl>     <chr>     <chr>                                  <chr>     <chr>       <dbl>
 1         2  303731 TRUE      Barcelona Sergio Busquets i Burgos               pass      success         0
 2         2  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              dribble   success         0
 3         2  303731 TRUE      Barcelona Héctor Junior Firpo Adames             dribble   success         0
 4         3  303731 TRUE      Barcelona Héctor Junior Firpo Adames             pass      success         0
 5         3  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              dribble   success         0
 6         4  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              pass      success         0
 7         4  303731 TRUE      Barcelona Jordi Alba Ramos                       dribble   success         0
 8         4  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo dribble   success         0
 9         4  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  dribble   success         0
10         5  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo pass      success         0
11         5  303731 TRUE      Barcelona Samuel Yves Umtiti                     dribble   success         0
12         5  303731 TRUE      Barcelona Clément Lenglet                        dribble   success         0

[[3]]
# A tibble: 11 x 8
# Groups:   no_passes [4]
   no_passes game_id home_team team_name player_name                            type_name result_name  subs
       <dbl>   <int> <lgl>     <chr>     <chr>                                  <chr>     <chr>       <dbl>
 1         3  303731 TRUE      Barcelona Héctor Junior Firpo Adames             pass      success         0
 2         3  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              dribble   success         0
 3         4  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              pass      success         0
 4         4  303731 TRUE      Barcelona Jordi Alba Ramos                       dribble   success         0
 5         4  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo dribble   success         0
 6         4  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  dribble   success         0
 7         5  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo pass      success         0
 8         5  303731 TRUE      Barcelona Samuel Yves Umtiti                     dribble   success         0
 9         5  303731 TRUE      Barcelona Clément Lenglet                        dribble   success         0
10         6  303731 TRUE      Barcelona Clément Lenglet                        pass      success         0
11         6  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  dribble   success         0

[[4]]
# A tibble: 11 x 8
# Groups:   no_passes [4]
   no_passes game_id home_team team_name player_name                            type_name result_name  subs
       <dbl>   <int> <lgl>     <chr>     <chr>                                  <chr>     <chr>       <dbl>
 1         4  303731 TRUE      Barcelona Arturo Erasmo Vidal Pardo              pass      success         0
 2         4  303731 TRUE      Barcelona Jordi Alba Ramos                       dribble   success         0
 3         4  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo dribble   success         0
 4         4  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  dribble   success         0
 5         5  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo pass      success         0
 6         5  303731 TRUE      Barcelona Samuel Yves Umtiti                     dribble   success         0
 7         5  303731 TRUE      Barcelona Clément Lenglet                        dribble   success         0
 8         6  303731 TRUE      Barcelona Clément Lenglet                        pass      success         0
 9         6  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  dribble   success         0
10         7  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  pass      success         0
11         7  303731 TRUE      Barcelona Clément Lenglet                        dribble   success         0

[[5]]
# A tibble: 8 x 8
# Groups:   no_passes [4]
  no_passes game_id home_team team_name player_name                            type_name result_name  subs
      <dbl>   <int> <lgl>     <chr>     <chr>                                  <chr>     <chr>       <dbl>
1         5  303731 TRUE      Barcelona Arthur Henrique Ramos de Oliveira Melo pass      success         0
2         5  303731 TRUE      Barcelona Samuel Yves Umtiti                     dribble   success         0
3         5  303731 TRUE      Barcelona Clément Lenglet                        dribble   success         0
4         6  303731 TRUE      Barcelona Clément Lenglet                        pass      success         0
5         6  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  dribble   success         0
6         7  303731 TRUE      Barcelona Gerard Piqué Bernabéu                  pass      success         0
7         7  303731 TRUE      Barcelona Clément Lenglet                        dribble   success         0
8         8  303731 TRUE      Barcelona Clément Lenglet                        pass      success         0

如果要将列表的每个项目保存为单独的输出,请先使用setNames,然后使用list2env 将每个项目保存为envir = .GlobalEnv 中的单独df

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 2021-04-26
    • 2019-07-15
    • 2017-11-03
    • 1970-01-01
    • 2020-01-06
    • 2022-01-09
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多