分组数据框并使用apply

时间:2014-04-07 14:11:43

标签: r dataframe apply tapply

我目前有一个看起来像这样的数据框......

Year           School     AveragePoints     
2012-2013     Alabama        2.5
2012-2013     Alabama        5.4
2012-2013     Alabama        10.4
2012-2013     Alabama        1.2
2012-2013     Alabama        9.2
2012-2013     Alabama        7.3

每一行代表该队伍当年的一名球员。因此,第一排意味着2012 - 2013年阿拉巴马州的一名球员平均每年得到2.5分。数据框架比这长得多,有更多的团队,而且这些年份持续到1997 - 1998年。我想知道如何找出每所学校每年平均在0-4,4.1-9,9.1-14和> 14.1之间的球员数量。换句话说,对于2012 - 2013年,阿拉巴马州有4个类别的平均玩家数量。但我需要每年为阿拉巴马州和其他相关学校提供这些数字。我认为应该使用某种形式的apply函数,但我不确定。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您应首先考虑cut,然后进入aggregate(或tapply)或甚至table

以下是我将如何继续:

添加包含cut结果的列。

mydf$AP <- with(mydf, cut(AveragePoints, c(0, 4.1, 9.1, 14.1)))

这是table方法:

table(mydf[c("AP", "Year", "School")])
# , , School = Alabama
# 
#             Year
# AP           2012-2013
#   (0,4.1]            2
#   (4.1,9.1]          2
#   (9.1,14.1]         2

但是,aggregate的输出可能是一种更有用的格式。

aggregate(. ~ Year + School + AP, mydf, length)
#        Year  School         AP AveragePoints
# 1 2012-2013 Alabama    (0,4.1]             2
# 2 2012-2013 Alabama  (4.1,9.1]             2
# 3 2012-2013 Alabama (9.1,14.1]             2