我正在尝试根据玩家的出生状态来汇总某些列中的值。
在R中使用Lahman软件包,我有以下代码:
library(Lahman)
#filter data frames by year
#collegeInfo <- CollegePlaying %>% filter(yearID >= 1999) #to do later
battingInfo <- Batting %>% filter(yearID >= 1999)
total <- merge(battingInfo,People,by="playerID")
totalN <- total[,-c(24,25,28:47)]
filterByState <- totalN %>% group_by(birthState) %>% summarise(players = length(birthState))
filterByGame <- totalN %>% group_by(birthState) %>% summarise(gamesPlayed = length(G))
在以上两个方面,我试图查看多少场比赛(G)和多少 每个州玩过的不同玩家的数量。但是,它们都返回相同的游戏值和玩家数量,即birthState'AB'具有11个游戏值和11个不应发生的值。这两个值都是错误的。出生州“ AB”的玩家打了11个赛季,但在这11个赛季中,只有4个来自不同的玩家ID。因此,出生状态“ AB”的玩家人数应为4,加上他们的比赛(G)应等于232G。(基于totalN的数据,这4位玩家和232 G是正确的)
newMerge <- merge(totalN, filterByState, by="birthState")
newTest <- newMerge %>% group_by(birthState) %>% summarise_at(vars(G, AB, R, H, X2B, X3B, HR, RBI, SB, CS, BB,
SO, IBB, HBP, SH, SF, GIDP), sum, na.rm = TRUE)
现在合并了所有内容,当您查看出生状态“ AB”时,现在已经玩了232场游戏,这是正确的,但是没有显示玩家人数。
如果可能的话,我想在函数newTest中查看每个状态的游戏和不同玩家的数量,并带有正确的数字(birthState'AB'应该有4个玩家,而来自newTest的更新数字用于所玩游戏是232。
例如,表格看起来像这样:
playerID birthState Hits Season GamesPlayed
player 1 NJ 17 2009 10
player 1 NJ 10 2010 20
player 2 NJ 20 2009 30
player 3 CA 45 2009 40
player 4 TX 87 2009 50
player 5 CA 50 2009 60
player 6 Outside USA 30 2009 70
我希望它看起来像这样(将每个州的所有点击次数相加):
birthState hits Players GamesPlayed
NJ 47 (17+20+10) 2 60 (10+20+30)
CA 95 (45+50) 2 100 (40+60)
TX 87 1 50
Outside 30 1 70
答案 0 :(得分:1)
我们可以做group_by
sum
library(dplyr)
out <- filterbyState1 %>%
group_by(birthState) %>%
summarise(hits = sum(H))
对于多列sum
,请使用summarise_at
filterbyState1 %>%
group_by(birthState) %>%
summarise_at(vars(H, players, AB, G), sum, na.rm = TRUE)