Запись функций над одной и той же переменной в списке фреймов данных в R - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю с некоторыми данными бейсбола и пытаюсь выяснить, как написать функции, которые работают со всеми столбцами в списке похожих фреймов данных. Так, например, у меня есть базовый процент для команды для каждой сыгранной игры, и я хочу запустить shift(cumsum(teamname$OBP)) для каждого фрейма данных в списке, чтобы найти кумулятивную сумму их OBP за сезон, а затем сдвиньте данные, чтобы каждая строка содержала накопленную сумму за предыдущие дни. Есть ли способ сделать это специально с помощью функции apply, чтобы она выполняла одну и ту же функцию для всех фреймов данных?

Ниже приведены некоторые переменные, к которым я хочу применить это:

> head(teams$SEA[27:34])
# A tibble: 6 x 8
     RA   OBP   SLG  wOBA  wOPS    RC    PE BBSOr
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     7 0.375 0.452 0.326 0.777  6.20 0.623 0.6  
2     4 0.314 0.442 0.298 0.740  7.29 0.610 0.556
3     4 0.419 0.861 0.478 1.34  13.8  0.9   0.444
4     7 0.3   0.559 0.350 0.908  6.48 0.424 0.4  
5     5 0.368 0.441 0.354 0.795  6.74 0.590 0.4  
6     8 0.422 0.568 0.418 0.985 10.1  0.610 0.636

Мой список выглядит следующим образом.

> summary(teams)
    Length Class       Mode
SEA 34     spec_tbl_df list
PIT 34     spec_tbl_df list
ARI 34     spec_tbl_df list
COL 34     spec_tbl_df list
SLN 34     spec_tbl_df list

1 Ответ

1 голос
/ 20 апреля 2020

Образец данных

Я дал Пиратам более низкий ОБП, чтобы показать, что функция работает по кадрам данных отдельно, а также потому, что они казались наиболее вероятным кандидатом из пяти не-СЭО у команд такой плохой ОБП:)

По будущим вопросам, пожалуйста, добавьте образцы данных, которые другие могут легко вставить в R. dput() - полезная функция для этого.

library(data.table)

SEA <- read.table(text = "     RA   OBP   SLG  wOBA  wOPS    RC    PE BBSOr
     7 0.375 0.452 0.326 0.777  6.20 0.623 0.6  
     4 0.314 0.442 0.298 0.740  7.29 0.610 0.556
     4 0.419 0.861 0.478 1.34  13.8  0.9   0.444
     7 0.3   0.559 0.350 0.908  6.48 0.424 0.4  
     5 0.368 0.441 0.354 0.795  6.74 0.590 0.4  
     8 0.422 0.568 0.418 0.985 10.1  0.610 0.636",
                  head = TRUE,)
PIT <- SEA
PIT$OBP <- PIT$OBP/2
ARI <- SEA
COL <- SEA
SLN <- SEA

teams <- list(SEA = SEA, 
              PIT = PIT, 
              ARI = ARI, 
              COL = COL, 
              SLN = SLN)

Решение

lapply(teams,
       function(x){
         x$OBP_cumsum <- shift(cumsum(x$OBP))
         x
       })

$SEA
  RA   OBP   SLG  wOBA  wOPS    RC    PE BBSOr OBP_cumsum
1  7 0.375 0.452 0.326 0.777  6.20 0.623 0.600         NA
2  4 0.314 0.442 0.298 0.740  7.29 0.610 0.556      0.375
3  4 0.419 0.861 0.478 1.340 13.80 0.900 0.444      0.689
4  7 0.300 0.559 0.350 0.908  6.48 0.424 0.400      1.108
5  5 0.368 0.441 0.354 0.795  6.74 0.590 0.400      1.408
6  8 0.422 0.568 0.418 0.985 10.10 0.610 0.636      1.776

$PIT
  RA    OBP   SLG  wOBA  wOPS    RC    PE BBSOr OBP_cumsum
1  7 0.1875 0.452 0.326 0.777  6.20 0.623 0.600         NA
2  4 0.1570 0.442 0.298 0.740  7.29 0.610 0.556     0.1875
3  4 0.2095 0.861 0.478 1.340 13.80 0.900 0.444     0.3445
4  7 0.1500 0.559 0.350 0.908  6.48 0.424 0.400     0.5540
5  5 0.1840 0.441 0.354 0.795  6.74 0.590 0.400     0.7040
6  8 0.2110 0.568 0.418 0.985 10.10 0.610 0.636     0.8880

$ARI
  RA   OBP   SLG  wOBA  wOPS    RC    PE BBSOr OBP_cumsum
1  7 0.375 0.452 0.326 0.777  6.20 0.623 0.600         NA
2  4 0.314 0.442 0.298 0.740  7.29 0.610 0.556      0.375
3  4 0.419 0.861 0.478 1.340 13.80 0.900 0.444      0.689
4  7 0.300 0.559 0.350 0.908  6.48 0.424 0.400      1.108
5  5 0.368 0.441 0.354 0.795  6.74 0.590 0.400      1.408
6  8 0.422 0.568 0.418 0.985 10.10 0.610 0.636      1.776

$COL
  RA   OBP   SLG  wOBA  wOPS    RC    PE BBSOr OBP_cumsum
1  7 0.375 0.452 0.326 0.777  6.20 0.623 0.600         NA
2  4 0.314 0.442 0.298 0.740  7.29 0.610 0.556      0.375
3  4 0.419 0.861 0.478 1.340 13.80 0.900 0.444      0.689
4  7 0.300 0.559 0.350 0.908  6.48 0.424 0.400      1.108
5  5 0.368 0.441 0.354 0.795  6.74 0.590 0.400      1.408
6  8 0.422 0.568 0.418 0.985 10.10 0.610 0.636      1.776

$SLN
  RA   OBP   SLG  wOBA  wOPS    RC    PE BBSOr OBP_cumsum
1  7 0.375 0.452 0.326 0.777  6.20 0.623 0.600         NA
2  4 0.314 0.442 0.298 0.740  7.29 0.610 0.556      0.375
3  4 0.419 0.861 0.478 1.340 13.80 0.900 0.444      0.689
4  7 0.300 0.559 0.350 0.908  6.48 0.424 0.400      1.108
5  5 0.368 0.441 0.354 0.795  6.74 0.590 0.400      1.408
6  8 0.422 0.568 0.418 0.985 10.10 0.610 0.636      1.776
...