R:tapply(x,y,sum)返回NA而不是0
我有一个包含多年、地区、季度和类型事件发生情况的数据集。样本:R:tapply(x,y,sum)返回NA而不是0,r,sum,na,tapply,R,Sum,Na,Tapply,我有一个包含多年、地区、季度和类型事件发生情况的数据集。样本: 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 这返回:
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
这返回:
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的值也是正确的
如果我使用just sum()检查返回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结合使用,而不是数据本身
有人对这个问题有什么建议吗
提前感谢我有两种可能的解决方案供您选择,具体取决于您正在寻找的产品。如果您只对每个<代码>类型<代码>和<代码>季度<代码>的正面<代码>命中次数感兴趣,并且不需要记录何时不存在<代码>命中次数<代码>的记录,您可以得到如下答案:
aggregate(data[["Hit"]], by = data[c("Type","Quarter")], FUN = sum)
如果重要的是要记录那些没有点击的,你可以使用
dataHit <- data[data[["Hit"]] == 1, ]
dataHit[["Type"]] <- factor(data[["Type"]])
dataHit[["Quarter"]] <- factor(data[["Quarter"]])
table(dataHit[["Type"]], dataHit[["Quarter"]])
dataHitsyno.wrng
是NULL
,这是因为您定义它时的输入错误。而且,sum
对因子没有意义。一个可复制的例子会很棒。这只是我代码的一个例子,在实际代码中,syno.wrng很好。我检查了所有的输入,它们都有预期的值。我很难给出一个可复制的示例,因为我无法共享我正在使用的数据。我尝试了该解决方案,它返回了与tapply相同的数据,但任何返回NA的类型都被删除。我仍然想知道这些NA值首先来自哪里。为什么tapply和aggregate中的sum()与单独使用sum()不同?aggregate
查看数据中实际存在的所有组合,并返回这些组合的总和<另一方面,code>tapply
查看syno.wrng
和quarter.number
的所有可能组合,因此,如果数据中不存在组合(例如ARCO
和1
),则返回NA
,以指示该组合不存在。
dataHit <- data[data[["Hit"]] == 1, ]
dataHit[["Type"]] <- factor(data[["Type"]])
dataHit[["Quarter"]] <- factor(data[["Quarter"]])
table(dataHit[["Type"]], dataHit[["Quarter"]])