Как рассчитать разницу между средним значением и значением переменной для всех столбцов с dyplr - PullRequest
0 голосов
/ 11 марта 2020

Я хочу вычислить разницу между средним значением и значением для всех столбцов в наборе данных. Мое уравнение:

residual = y - mean(y)

Мой исходный набор данных выглядит следующим образом:

d_season_combined %>% head()

         Player Pos Age Team  G GS  MPG  FG FGA   FG%  3P 3PA   3P%  2P 2PA   2P%  eFG%  FT FTA   FT% ORB DRB TRB
1  Álex Abrines  SG  24  OKC 75  8 15.1 1.5 3.9 0.395 1.1 2.9 0.380 0.4 0.9 0.443 0.540 0.5 0.6 0.848 0.3 1.2 1.5
2    Quincy Acy  PF  27  BRK 70  8 19.4 1.9 5.2 0.356 1.5 4.2 0.349 0.4 1.0 0.384 0.496 0.7 0.9 0.817 0.6 3.1 3.7
3  Steven Adams   C  24  OKC 76 76 32.7 5.9 9.4 0.629 0.0 0.0 0.000 5.9 9.3 0.631 0.629 2.1 3.8 0.559 5.1 4.0 9.0
4   Bam Adebayo   C  20  MIA 69 19 19.8 2.5 4.9 0.512 0.0 0.1 0.000 2.5 4.8 0.523 0.512 1.9 2.6 0.721 1.7 3.8 5.5
5 Arron Afflalo  SG  32  ORL 53  3 12.9 1.2 3.1 0.401 0.5 1.3 0.386 0.7 1.7 0.413 0.485 0.4 0.5 0.846 0.1 1.2 1.2
6  Cole Aldrich   C  29  MIN 21  0  2.3 0.2 0.7 0.333 0.0 0.0    NA 0.2 0.7 0.333 0.333 0.1 0.3 0.333 0.1 0.6 0.7

, и я вычислил среднее значение для каждого столбца следующим образом:

d_league_average <- d_season_combined %>%
  select(-c(Player, Team, Pos, Season)) %>%
  mutate_if(is.character, as.numeric) %>%
  summarise_all(mean, na.rm = TRUE)

     Age        G       GS      MPG       FG      FGA       FG%        3P     3PA       3P%       2P      2PA
1 25.99439 48.79159 22.99065 19.27589 3.113551 6.873738 0.4432531 0.8437383 2.40972 0.3118051 2.269533 4.465794

Мне удалось вычислить средние невязки для одного столбца, например:

  d_season_combined %>% 
  select(PTS) %>% 
  lapply(function(i)i-d_league_average$PTS)

$PTS
   [1] -3.68504673 -2.48504673  5.51495327 -1.48504673 -4.98504673 -7.78504673 14.71495327 -0.18504673 -7.28504673
  [10] -3.68504673  0.91495327 -2.18504673 -0.48504673  0.91495327 -7.18504673 18.51495327  7.81495327 -2.48504673

, но я не знаю, как это сделать для всех столбцов. Я попытался решить эту проблему с помощью summarise_all:

  d_residuals <- d_season_combined %>% 
  select(-c( Pos, Team)) %>%
  group_by(Season, Player) %>% 
  summarise_all(function(i)d_league_average[i])

с помощью lapply:

 d_residuals <- lapply(d_season_combined[column_names], function(i) y-d_league_average[i]) %>% bind_rows()

, но у меня это не работает. Как я могу добиться этого для всех столбцов? Спасибо за вашу помощь

1 Ответ

2 голосов
/ 11 марта 2020

Вместо того, чтобы вычислять d_league_average отдельно и затем использовать его для вычисления d_residuals, мы можем вычесть значения из соответствующего среднего значения столбца непосредственно за один шаг.

library(dplyr)

d_season_combined %>%
  select(-c(Player, Team, Pos)) %>%
  mutate_if(is.character, as.numeric) %>%
  mutate_all(~. - mean(., na.rm = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...