最近参加了一个小比赛,其中的tapply,sapply(lapply)函数可以快速实现我的目的和有效减少代码量
f | 说明 |
---|---|
tapply(x,f,g) | x为向量,f为因子列,g为操作函数,相对数据框进行类似操作可以用by函数 |
sapply(list,g) | g为操作函数,返还结果为向量,而lapply返还结果为list形式。常与split结合使用 |
example
数据为980路公交车不同站点上车人数统计
线路名称 | 车牌号 | 到达站点 | 上车人数 | 开始上车时间 | 结束上车时间 |
---|---|---|---|---|---|
980 | 粤BM8475 | 14 | 11 | 2014-06-09 07:08 | 2014-06-09 07:13 |
980 | 粤BM8475 | 13 | 3 | 2014-06-09 07:14 | 2014-06-09 07:15 |
980 | 粤BM8475 | 12 | 10 | 2014-06-09 07:17 | 2014-06-09 07:17 |
980 | 粤BM8475 | 10 | 5 | 2014-06-09 07:20 | 2014-06-09 07:20 |
980 | 粤BM8475 | 8 | 1 | 2014-06-09 07:22 | 2014-06-09 07:22 |
- 统计不同站点的上车人数
(Freq <- tapply(data[,4], data[,3], sum))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
120 257 325 164 174 186 205 80 118 267 259 130 77 541 704 133
- 按照车牌号分类,分别统计不同站点上车人数
data <- split(data, data$车牌号) ##对数据按照车牌号分组
Freq <- sapply(data, function(data){
tapply(data$上车人数, data$到达站点, sum)
}) ##按照车牌号统计不同站点上车人数
Freq[1] ##查看结果
$粤BM8475
1 2 3 4 5 7 8 9 10 12 13 14 15
14 34 12 6 15 2 4 39 7 34 3 27 1
总结
对因子,列表这两个数据类型的熟练应用,会对R的强大有更深一步理解