2016-08-16 8 views
-1

私は、複数年、地域、四半期、およびタイプにわたるイベントの出現を含むデータセットを持っています。サンプル:私はすべてのデータのための種別ごとのヒット数の量、および四半期を取得したいR:tapply(x、y、sum)は0の代わりにNAを返します。

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 

私が興味の列を調べるために定義された変数を持っています。ヒット数が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でない値も正しい。

I)は(単に和を用い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使用する方法であるようだ、とデータそのものではありません。

誰かが問題の可能性に関する提案はありますか?事前

+4

を使用することができます。また、「合計」は要因に意味がありません。再現可能な例はすばらしいでしょう。 –

+0

これは私のコードの例ですが、実際のコードではsyno.wrngは問題ありません。私はすべての入力をチェックしており、それらはすべて期待値を持っています。私が作業しているデータを共有できないため、再現可能な例を提示することは難しいです。 –

答えて

0

おかげで私は、あなたが探している正確に何に依存するための2つの潜在的なソリューションを提供しています。あなただけTypeQuarterあたりの正Hit秒のあなたの数に興味があり、何Hit sが存在しないときの記録を必要としない場合、維持することが重要である場合は、

aggregate(data[["Hit"]], by = data[c("Type","Quarter")], FUN = sum) 

として答えを得ることができますまったくヒットが同様に存在しないものの記録は、あなたがそれを定義したとき、 `syno.wrng`があるため、タイプミスの` NULL`ある

dataHit <- data[data[["Hit"]] == 1, ] 
dataHit[["Type"]] <- factor(data[["Type"]]) 
dataHit[["Quarter"]] <- factor(data[["Quarter"]]) 
table(dataHit[["Type"]], dataHit[["Quarter"]]) 
+0

私はその解決策を試して、それはtapplyと同じデータを返しましたが、NAを返すタイプは削除されました。私はまだそれらのNA値がどこから来るのか理解したいと思うでしょう。なぜtapplyのsum()とaggregateは単独でsum()を使うのと違うのですか? –

+0

'aggregate'はあなたのデータに実際に存在するすべての組み合わせを探し、それらの合計を返します。一方、 'tapply'は' syno.wrng'と 'quarter.number'のすべての可能な組み合わせを調べますので、あなたのデータに(ARCO'や' 1'などの)組み合わせが存在しない場合は 'NAそれが存在しないことを示す。 – Barker

関連する問題