2016-09-10 12 views
2

summarize()の条件でsum()を適用すると、正しい答えが得られません。条件付きsum()はdplyrパッケージで不正確な結果を提供します

データフレームx行います。これは、xがどのように見えるかです

x = data.frame(flag = 1, uin = 1, val = 2) 
x = rbind(x, data.frame(flag = 2, uin = 2, val = 3)) 

を:

flag uin val 
1 1 1 2 
2 2 2 3 

私はflag == 2valvalを総括したいので、私は

を書きます
x %>% summarize(val = sum(val), val.2 = sum(val[flag == 2])) 

であり、結果は、

val val.2 
1 5 NA 

しかし、私が期待しているのはval.2NAではなく3であることです。私は、最初の総和を条件付き和を計算する場合の詳細については、それが正解で出てくる:

また
x %>% summarize(val.2 = sum(val[flag == 2]), val = sum(val)) 
    val.2 val 
1  3 5 

、私は唯一の条件付きの合計を計算する場合、それはあまりにも正常に動作します:

x %>% summarize(val.2 = sum(val[flag == 2])) 
    val.2 
1  3 
+0

私は愚かな間違いを犯したと思います。私は、以下の条件付き集計を行うために使用した変数の名前と同じ、合計結果に「val」という名前を付けました。私が 'val.total'という名前をつけた場合、計算エラーはありません。 –

+0

正確 - 下の私の答えを見てください – csgillespie

答えて

4

名前が重複しているため、問題が発生しています。このコード内

x %>% summarize(val = sum(val), val.2 = sum(val[flag == 2])) 

2つのvalオブジェクトがあります。 1つはval = sum(val)から作成され、その他はデータフレームxから作成されます。コードでは、valをデータフレーム値からval=sum(val) = 5に変更します。そして、あなたはval = 5以来、ベクトルc(2, NA)を与える

`val[flag == 2]` 

を行います。したがって、2 + NAを追加するとNAが得られます。解決策は、valを2回使用しないでください。

x %>% summarize(val_sum = sum(val), val.2 = sum(val[flag == 2])) 
関連する問題