簡體   English   中英

R中的群組時未獲得小計

[英]Not getting subtotals when groups in R

每次球員改變時,我都需要小計他職業生涯中的三振。

我嘗試使用下面的代碼來執行此操作,但未獲得小計。

player <- c('acostma01', 'acostma01', 'acostma01', 'adkinjo01', 'aguilri01', 'aguilri01', 'aguilri01', 'aguilri01', 'aguilri01')
        year <- c(2010,2011,2012,2007,1985,1986,1987,1988,1989)
        games <- c(41,44,45,1,21,28,18,11,36)
        strikeouts <- c(42,46,46,0,74,104,77,16,80)
        bb_data <- data.frame(player, year, games, strikeouts, stringsAsFactors = FALSE)

這是無效的代碼。

mets <- select(bb_data, player, year, games, strikeouts) %>% 
group_by(player, year) %>% 
colSums(SO)

這是我想要的輸出:

player      games strikeouts
acostma01   130   134
adkinjo01   1     0
aguilri01   0     351
Grand Total       485

這是我得到的(數據尾):

player    team    year  games strikouts
<chr>     <chr>   <int> <int> <int>
swarzan01 NYN      2018    29    31
syndeno01 NYN      2018    25   155
vargaja01 NYN      2018    20    84
wahlbo01  NYN      2018     7     7
wheelza01 NYN      2018    29   179
zamorda01 NYN      2018    16    16

您可以這樣做:

library(tidyverse)

bb_data %>% 
  group_by(player) %>% 
  summarise_at(vars(games, strikeouts), sum) %>%
  add_row(player = 'Grand Total', games = NA, strikeouts = sum(.$strikeouts))

這將為您提供:

# A tibble: 4 x 3
  player      games strikeouts
  <chr>       <dbl>      <dbl>
1 acostma01     130        134
2 adkinjo01       1          0
3 aguilri01     114        351
4 Grand Total    NA        485

這與除aguilri01 games以外的所有值都一致-我認為這是一個錯字,但是如果這不正確,請告訴我。

對於降序,您可以執行以下操作:

bb_data %>% 
  group_by(player) %>% 
  summarise_at(vars(games, strikeouts), sum) %>%
  arrange(-strikeouts) %>%
  add_row(player = 'Grand Total', games = NA, strikeouts = sum(.$strikeouts))

輸出:

# A tibble: 4 x 3
  player      games strikeouts
  <chr>       <dbl>      <dbl>
1 aguilri01     114        351
2 acostma01     130        134
3 adkinjo01       1          0
4 Grand Total    NA        485

要還包括播放的季節,您可以嘗試:

bb_data %>% 
  group_by(player) %>% 
  mutate(seasons_played = n_distinct(year)) %>%
  group_by(player, seasons_played) %>%
  summarise_at(vars(games, strikeouts), sum) %>% 
  arrange(-strikeouts) %>%
  ungroup() %>%
  add_row(player = 'Grand Total', games = NA, seasons_played = NA, strikeouts = sum(.$strikeouts))

如果您不關心開始匯總的年份列,則可以執行以下操作:

 library(data.table)
 data = setDT(bb_data)[, c(lapply(.SD, sum), .N), by =player]

.N允許您按播放器計數行數(年數)。

然后,您可以訂購它(用-使其遞減):

data[order(-data$strikeouts)]

您得到以下結果:

1: aguilri01 9935   114        351 5
2: acostma01 6033   130        134 3
3: adkinjo01 2007     1          0 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM