我有一个数据集,其中包含多年,地区,季度和类型的事件。样品:
REGION Prov Year Quarter Type Hit Miss
xxx yy 2008 4 Snow 1 0
xxx yy 2009 2 Rain 0 1
我定义了变量以检查感兴趣的列:
syno.h <- data$Type
quarter.number<-data$Quarter
syno.wrng<- data$Type
我想获得每种类型的点击量,以及所有数据的季度。鉴于Hits是0或1,那么使用tapply的简单sum()函数是我的第一次尝试。
tapply(syno.h, list(syno.wrng, quarter.number), sum)
这回复了:
1 2 3 4
ARCO NA NA NA 0
BLSN 0 NA 15 74
BLZD 4 NA 17 54
FZDZ NA NA 0 1
FZRA 26 0 143 194
RAIN 106 126 137 124
SNOW 43 2 215 381
SNSQ 0 NA 18 53
WATCHSNSQ NA NA NA 0
WATCHWSTM 0 NA NA NA
WCHL NA NA NA 1
WIND 47 38 155 167
WIND-SUETES 27 6 37 56
WIND-WRECK 34 14 44 58
WTSM 0 1 7 18
对于某些在给定四分之一中没有出现的类型,tapply有时会返回NA而不是零。我已多次检查数据,我确信它很干净。不是NA的值也是正确的。
如果我使用sum()检查使用tapply返回NA的类型/四分之一组合,我会得到我期望的值:
sum(syno.h[quarter.number==3&syno.wrng=="BLSN"])
[1] 15
> sum(syno.h[quarter.number==1&syno.wrng=="BLSN"])
[1] 0
> sum(syno.h[quarter.number==2&syno.wrng=="BLSN"])
[1] 0
> sum(syno.h[quarter.number==2&syno.wrng=="ARCO"])
[1] 0
似乎我的问题在于如何使用tapply和sum,而不是数据本身。
有没有人对这个问题有什么建议?
提前致谢
答案 0 :(得分:0)
根据您正在寻找的内容,我有两种可能的解决方案。如果您只对每Hit
和Type
的{{1}}个积极感兴趣,并且不需要记录何时不存在Quarter
,那么您可以得到一个答案
Hit
如果记录那些没有命中的记录很重要,你可以使用
aggregate(data[["Hit"]], by = data[c("Type","Quarter")], FUN = sum)