8

2つのデータテーブルの合計を計算する場合、NA+n=NA

> dt1 <- data.table(Name=c("Joe","Ann"), "1"=c(0,NA), "2"=c(3,NA))
> dt1
   Name  1  2
1:  Joe  0  3
2:  Ann NA NA
> dt2 <- data.table(Name=c("Joe","Ann"), "1"=c(0,NA), "2"=c(2,3))
> dt2
   Name  1 2
1:  Joe  0 2
2:  Ann NA 3
> dtsum  <- rbind(dt1, dt2)[, lapply(.SD, sum), by=Name]
> dtsum
   Name  1  2
1:  Joe  0  5
2:  Ann NA NA

すべてのNAを0に置き換えたくありません。必要なのはNA+NA=NANA+n=n次の結果を取得することです。

   Name  1  2
1:  Joe  0  5
2:  Ann NA  3

これはRでどのように行われますか?

更新:dt1のタイプミスを削除

4

2 に答える 2

11

必要に応じて動作するように独自の関数を定義できます

plus <- function(x) {
 if(all(is.na(x))){
   c(x[0],NA)} else {
   sum(x,na.rm = TRUE)}
 }


rbind(dt1, dt2)[,lapply(.SD, plus), by = Name]
于 2013-02-24T23:19:46.500 に答える
4
dtsum  <- rbind(dt1, dt2)[, lapply(.SD, function(x) ifelse(all(is.na(x)), as.numeric(NA), sum(x, na.rm=T))), by=Name]

(@Arunの提案を含む) na.rm=TRUE覚えておくと非常に便利です

于 2013-02-24T23:06:36.350 に答える