data.frame
にはcharacter
の列があり、複数の数値の列にはNA
が含まれています。 df$id
によってaggregate
df
に私が欲しいdata.tableを使用してdata.frameをNAsに集約する
df <- data.frame(id=rep("A",3),v1=c(NA,1,NA),v2=c(2,5,2),v3=c(NA,NA,NA),V4=c(0,0,0),stringsAsFactors=F)
df$id
以来繰り返し、他のすべての列にsum
を適用します。ここでは
私はこれでした:
require(data.table)
setDT(df)[,lapply(.SD, function(x) sum(x,na.rm=T)),by=.(id)]
と、この取得しています:
id v1 v2 v3 V4
1: A 1 9 0 0
だから、列v3
はdf
内のすべてのNA
年代であり、したがってために問題となる0
の値を、取得します私はそのような場合にはNA
の値を保持したいと思いますが、他のすべてのケースでは(集計は数値とNA
の組み合わせを超えていますが、明らかにNA
の場合は、合計はNA
になります)。例では(df$v4
)と表示されていますが、すべて0
の列があるため、をdata.frame
のNA
のものに置き換えることはできません。
言い換えれば、これは私の所望の成果れる:
id v1 v2 v3 V4
1: A 1 9 NA 0
任意のアイデアどのようにdata.table
の.SD
凝集を得るためには、これを達成するには?
ない 'data.table'問題なくこれを行うことができます:' '合計(C(NA、NA、NA)、na.rm = TRUE) * – Cath
あなた自身の関数を記述する 'mySum < - function(x)if(すべて(is.na(x)))NA else sum( - )(空のセットの合計がゼロであるため、 x、na.rm = TRUE) ' – jogo