试试这个:
library(plyr)
ddply(your.data, .(Date), summarize, nNA = sum(is.na(Expenditure))
这由Date
分割备份数据为子组和功能sum(is.na())
适用于这些分组的Expenditure
列。
例如,
df <- read.table(text="Group Expenditure Date
A 56434 22June2014
B 54231 1July2013
B 1412 9May2011
A NA 28July2009
A NA 3July2009
C 98 2July1999
C NA 14July2004 ", sep="", header=T)
ddply(df, .(Date), summarize, nNA=sum(is.na(Expenditure)))
产量:
Date nNA
1 14July2004 1
2 1July2013 0
3 22June2014 0
4 28July2009 1
5 2July1999 0
6 3July2009 1
7 9May2011 0
也有几个base
-solutions。这里的一些例子:
使用by
by(df, df$Date, function(x) sum(is.na(x$Expenditure)))
使用tapply
with(df, tapply(Expenditure, Date, function(x) sum(is.na(x))))
aggregate
使用(帽尖到@ user20650)
aggregate(df$Expenditure, by=list(df$Date), FUN= function(x) sum(is.na(x)))
这些都给出了相同的结果,但格式略有不同。选择你最喜欢的一个。对于更一般的治疗,这种问题被称为“分裂 - 应用 - 组合”,见例如。 here。
喜Henrik,感谢您表达兴趣。数据从CSV文件导入,其中缺少支出数据编码为NA。 – Konrad