[英]r- sum unique values in aggregate function and use NA as 0
我有一张桌子:
ppp<-data.frame(client=c(1,1,1,3,3,4),
calldate=c('2014-08-07', NA,'2014-08-06',NA, '2014-08-08',NA),
paydate=c('2014-08-07', '2014-08-09', NA, '2014-08-06',NA,'2014-08-06' ))
我需要得到每个客户的calldate计数。 我试过了:
my.fun<-function (x) {sum(!is.na(unique(x)))}
ppp2<-aggregate(calldate~(client+calldate) , ppp, my.fun)
我有:
> ppp2
client calldate
1 2
3 1
正如你所看到的那样,我输掉了3号客户端,我想要拥有所有这些客户端,如果他们没有接到电话,我就会丢失零。
client calldate
1 2
3 1
3 0
如何计算日期,如果没有日期,则为0? 我也尝试过:
my.fun<-function (x) {length(unique(x))}
并得到了相同的结果
我也尝试了以下内容:
my.fun<-function (x) {if (is.na(x)) {0} else {length(unique(x))}}
我收到一个错误:
警告消息:在if(is.na(x)){:条件长度> 1且仅使用第一个元素
如果你使用参数na.action = na.pass
它可以工作。 否则, aggregate
将忽略NA
值。
aggregate(calldate ~ client, ppp, my.fun, na.action = na.pass)
# client calldate
# 1 1 2
# 2 3 1
# 3 4 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.