我有一个基于数据框(df是示例行)的三个部分问题,该数据框由足球运动员在一个赛季中得分;
Player Season Goals
Teddy Sheringham 1992/3 22
Les Ferdinand 1992/3 20
Dean Holdsworth 1992/3 19
Andy Cole 1993/4 34
Alan Shearer 1993/4 31
Chris Sutton 1993/4 25
如果我想每年获得最佳射手,我可以使用
ddply(df, "Season", summarise, maxGoals = max(Goals),
Player=Player[which.max(Goals)])
问题:
1)在这种情况下不适用,但如果有联合最佳射手那么这就足够了
2)我也对每个赛季被提取的亚军感兴趣。我已经玩过对目标降序和索引2进行排序但尚未找到解决方案
3)另外,我如何根据得分的目标数量获得每年的计数值,例如,在上述数据中,目标> 20应该给出1992/3的1和1993/4的3
答案 0 :(得分:1)
如果有多个最佳玩家,那么该表达式将只报告其中一个(特别是该年度数据帧中的第一个)。
对于q2:
d = ddply(df, "Season", summarise, SecondPlayer=Player[order(Goals)[length(Goals)-1]])
对于q3:
d = ddply(df, "Season", summarise, Count=sum(Goals > 20))
答案 1 :(得分:1)
1 + 2)不,这还不够。您可以更好地查看unique
下的Goals
值,并在该情况下获取与相应值对应的行。也许是这样的,
myFun <- function(x,k){
val <- sort(unique(x$Goals))
Players <- x$Players[x$Goals == val[k]]
data.frame(Players = Players, maxGoals = rep(val[k],length(Players)))
}
ddply(df,.(Season),myFun,k = 1)
您可以使用参数k
指定是否希望玩家拥有最多,次数最多等目标数。 (显然,这是未经测试的,因此可能需要进行一些小修改。)