繁体   English   中英

r-汇总函数中的唯一值,并使用NA作为0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM