2017-06-26 3 views
1

を合計するときに私はこのデータセットを有するR. におけるいくつかの集約関数に問題を有する:xの「B」レベルの場合R凝集は値0を与え、それはNA

df = data.table(x = rep(letters[1:3], each = 4), y = seq(15,26)) 

# I put NA value for "b" levels  
df[5:8,2] = NA 

を、I Yのみの列と集計の結果のためのNA値持っているが

agg1 = ddply(df, .(x), summarize, agg = sum(y, na.rm = TRUE)) 

agg2 = aggregate(y ~ x, data = df, sum, na.action=na.pass, na.rm=TRUE) 

agg3 = df[, agg := sum(y, na.rm = TRUE), by = list(x)] 

(...私が欲しいもの)ではなくNAの0で(NA + NA + ... + NA)の合計を置き換える私はできません実際のデータセットの複雑さのためにこの問題を越えるために私のデータセットのNA値を削除してください。

答えて

0

あなたが必要とするすべては= T

agg2<- aggregate(y ~ x, data = df, sum, na.action=na.pass) 

na.rmを削除することであり、これが結果です:解決のための

> agg2 
    x y 
1 a 66 
2 b NA 
3 c 98 
+0

おかげますが、このラインを持っている場合:11 [DF 2] = NA "a"因子は数字でいっぱいであり、 "b"因子はNAで満ちていて、 "c"因子は数字およびNAである。あなたが与えた解決策は、このケースでは機能しません。 – nimliug

+0

あなたの答えはここにあります:[link](https://stackoverflow.com/questions/15057769/treat-na-as-zero-only-when-adding-a-number) 'plus < - function X){ (全て(is.na(X))){ C(X [0]、NA)}他{ 和(X、na.rm = TRUE)} なら} DF [ lapply(.SD、plus)、by = x] ' –

関連する問題