我有一张表:
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))}}
我收到错误:
警告消息:如果(is.na(x)){:条件的长度为&gt; 1 并且只使用第一个元素
答案 0 :(得分:3)
如果您使用参数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