R语言-plyr包中的函数

plyr包集中体现了“分离-操作-结合”的数据操作理念。

plyr的核心函数由ddply、llply、laply函数组成,所有的函数名均由五个字母组成且最后三个字母都为ply。函数名的第一个字母代表输入值的类型,第二个字母代表输出值的类型。(plyr是根据单词钳子(plier)仿造出的词,因为钳子是用途广泛且必不可少的常用工具之一)

plyr包中的函数及其输入值和输出值
函数名输入值类型输出值类型
ddply

数据框

数据框
llply列表列表
aaply数组/相量/矩阵数组/相量/矩阵
dlply数据框列表
daply数据框数组/相量/矩阵
d_ply数据框
ldply列表数据框
laply列表数组/相量/矩阵
l_ply列表
adply数组/相量/矩阵数据框
alply数组/相量/矩阵列表
a_ply数组/相量/矩阵

1.ddply

    函数ddply()以数据框为输入值,根据几个变量对其分类并做相应的运算,最后返回一个数据框。

    以plyr包中的baseball数据为例:

library(plyr)
head(baseball)

在棒球比赛中一个常用的统计数据为上垒率(OBP),其计算公式为:

OBP=\frac{H+BB+HBP}{AB+BB+HBP+SF}

其中H为安打,BB为四坏保送,HBP为触身球,AB为打数,SF为高飞牺牲打

在1954年之前,高飞牺牲打被算为牺牲打的一部分,且其还包括短打,所以1954年之前球员的高飞牺牲打数据假定为0.这是需要对原数据做的第一个改变。还有原始数据中HBP有许多缺失值,我们应该设其为0。此外,我们还剔除了一个赛季少于50打数的球员数据。

首先将1954年之前的sf数据设为0,并检测sf数据有没有缺失值

baseball$sf[baseball$year<1954]<-0
any(is.na(baseball$sf))

[1] FALSE

结果显示没有缺失的sf值

再将HBP中的缺失值设为0,并检测

baseball$hbp[is.na(baseball$hbp)]<-0
any(is.na(baseball$hbp))

[1] FALSE

然后剔除一个赛季少于50打数的球员数据

baseball<-baseball[baseball$ab>=50,]

添加一个新变量OBP,按OBP公式操作

baseball$OBP<-with(baseball,(h+bb+hbp)/(ab+bb+hbp+sf))
tail(baseball)

为了计算每个球员在其整个职业生涯的OBP指标,就不能仅仅平均其在单个赛季的OBP,这需要对分子和分母上的变量同时求和并用分子除以分母。这样的操作可以用ddply函数完成。

首先定义一个做以上运算的函数,并通过ddply调用使其运用到每一个球员的数据上。

obp<-function(data)
+     {
+     c(OBP=with(data,sum(h+bb+hbp)/sum(ab+bb+hbp+sf)))
+ }
careerOBP<-ddply(baseball,.variables='id',.fun=obp)
careerOBP<-careerOBP[order(careerOBP$OBP,decreasing=TRUE),]
head(careerOBP,10)

结果返回了职业生涯中上垒率前十的球员数据。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值