[英]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.