Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:tapply(x,y,sum)返回NA而不是0_R_Sum_Na_Tapply - Fatal编程技术网

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"]])

dataHit
syno.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"]])