Создание нового столбца в моем фрейме данных на основе функции - PullRequest
0 голосов
/ 26 мая 2020

У меня есть фрейм данных с командами НФЛ и некоторыми данными о них. Я хочу добавить очки за игру для каждой команды на этой конкретной неделе. Я не могу просто суммировать данные по командам, поскольку мне нужна отдельная игра в том виде, в котором она представлена ​​в настоящее время.

    CurrYrfun <- function(Yr,Tm,Wk){
  PPG <- Schedule_Results %>% 
    filter(Year == Yr & Team == Tm & Week < Wk) %>% 
    group_by(Team) %>% 
    summarize(APG = mean(Pts))
  return(PPG[['APG']])
}

Эта функция дает правильный результат для отдельных записей, но когда я пытаюсь изменить новый столбец в dataframe, как показано ниже:

    Schedule_Results <- Schedule_Results %>% 
  mutate(PPG = CurrYrfun(Year, Team, Week))

Я получаю сообщение об ошибке, говоря, что PPG имеет длину 0. Я попытался прикрепить изображение dataframe, чтобы вы имели представление о данных, с которыми я работаю. снимок фрейма данных здесь

Отредактировано, чтобы включить данные и примеры:

Schedule_Results <- structure(list(Year = c(2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 
 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 
 2019L, 2019L, 2019L, 2019L, 2019L, 2019L), Week = c(17, 17, 17, 
 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 
 11, 11), Team = c("Washington Redskins", "Cincinnati Bengals", 
 "Jacksonville Jaguars", "Jacksonville Jaguars", "Washington Redskins", 
 "Cincinnati Bengals", "Cincinnati Bengals", "Washington Redskins", 
 "Jacksonville Jaguars", "Washington Redskins", "Cincinnati Bengals", 
 "Jacksonville Jaguars", "Jacksonville Jaguars", "Washington Redskins", 
 "Cincinnati Bengals", "Cincinnati Bengals", "Jacksonville Jaguars", 
 "Washington Redskins", "Washington Redskins", "Jacksonville Jaguars", 
 "Cincinnati Bengals"), Opp = c("Dallas Cowboys", "Cleveland Browns", 
 "Indianapolis Colts", "Atlanta Falcons", "New York Giants", "Miami Dolphins", 
 "New England Patriots", "Philadelphia Eagles", "Oakland Raiders", 
 "Green Bay Packers", "Cleveland Browns", "Los Angeles Chargers", 
 "Tampa Bay Buccaneers", "Carolina Panthers", "New York Jets", 
 "Pittsburgh Steelers", "Tennessee Titans", "Detroit Lions", "New York Jets", 
 "Indianapolis Colts", "Oakland Raiders"), Pts = c(16, 33, 38, 
 12, 35, 35, 13, 27, 20, 15, 19, 10, 11, 29, 22, 10, 20, 19, 17, 
 13, 10), Opp_Pts = c(47, 23, 20, 24, 41, 38, 34, 37, 16, 20, 
 27, 45, 28, 21, 6, 16, 42, 16, 34, 33, 17), Yds = c(271, 361, 
 353, 288, 361, 430, 315, 352, 262, 262, 451, 252, 242, 362, 277, 
 244, 369, 230, 225, 308, 246), Opp_Yds = c(517, 313, 275, 518, 
 552, 502, 291, 415, 364, 341, 333, 525, 315, 278, 271, 338, 471, 
 364, 400, 389, 386), TO = c(2, 1, 1, 1, 0, 1, 5, 1, 0, 1, 1, 
 0, 4, 0, 0, 2, 1, 2, 1, 1, 2), Opp_TO = c(1, 3, 2, 2, 0, 1, 0, 
 1, 0, 1, 2, 0, 1, 2, 0, 1, 2, 4, 2, 2, 2), Home = c("1", "1", 
 "1", "1", "0", "1", "0", "0", "0", "1", "1", "0", "0", "0", "1", 
 "0", "1", "1", "0", "1", "1"), Playoffs = c(0, 0, 0, 0, 0, 0, 
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), win = c("0", "1", 
 "1", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "1", "1", 
 "0", "0", "1", "0", "0", "0")), row.names = c(NA, -21L), class = "data.frame")
CurrYrfun <- function(Yr,Tm,Wk){
  PPG <- Schedule_Results %>% 
    filter(Year == Yr & Team == Tm & Week < Wk) %>% 
    group_by(Team) %>% 
    summarize(APG = mean(Pts))
  return(PPG[['APG']])
}

CurrYrfun(2019,'Washington Redskins',13)
CurrYrfun(2019,'Jacksonville Jaguars',14)
CurrYrfun(2019,'Washington Redskins',16)
CurrYrfun(2019,'Cincinnati Bengals',15)

Schedule_Results <- Schedule_Results %>% 
  mutate(PPG = CurrYrfun(Year, Team, Week))

Моя цель - вернуть результат функции для каждой строки как новый столбец в фрейме данных

1 Ответ

1 голос
/ 26 мая 2020

Я почти уверен, что это то, что вы хотите. Я проверил первые пару примеров, которые вы привели, и они выглядят правильно.

 Schedule_Results %>%
   group_by(Team, Year) %>%
   arrange(Week) %>%
   mutate(PPG = lag(cummean(Pts), 1))
# # A tibble: 21 x 14
# # Groups:   Team, Year [3]
#     Year  Week Team             Opp                Pts Opp_Pts   Yds Opp_Yds    TO Opp_TO Home  Playoffs win     PPG
#    <int> <dbl> <chr>            <chr>            <dbl>   <dbl> <dbl>   <dbl> <dbl>  <dbl> <chr>    <dbl> <chr> <dbl>
#  1  2019    11 Washington Reds~ New York Jets       17      34   225     400     1      2 0            0 0      NA  
#  2  2019    11 Jacksonville Ja~ Indianapolis Co~    13      33   308     389     1      2 1            0 0      NA  
#  3  2019    11 Cincinnati Beng~ Oakland Raiders     10      17   246     386     2      2 1            0 0      NA  
#  4  2019    12 Cincinnati Beng~ Pittsburgh Stee~    10      16   244     338     2      1 0            0 0      10  
#  5  2019    12 Jacksonville Ja~ Tennessee Titans    20      42   369     471     1      2 1            0 0      13  
#  6  2019    12 Washington Reds~ Detroit Lions       19      16   230     364     2      4 1            0 1      17  
#  7  2019    13 Jacksonville Ja~ Tampa Bay Bucca~    11      28   242     315     4      1 0            0 0      16.5
#  8  2019    13 Washington Reds~ Carolina Panthe~    29      21   362     278     0      2 0            0 1      18  
#  9  2019    13 Cincinnati Beng~ New York Jets       22       6   277     271     0      0 1            0 1      10  
# 10  2019    14 Washington Reds~ Green Bay Packe~    15      20   262     341     1      1 1            0 0      21.7
...
...