如果所有NA

时间:2019-02-24 15:52:19

标签: r data.table

在使用na.rm = T计算rowSum的情况下,如果所有行均为NA,总有避免0的结果

在以下示例中,

在所有行均为NA的情况下,行总和为零,但结果中需要NA。我不能使用na.rm = T来跳过,因为其他情况下可能会有一些NA。
我正在寻找数据表解决方案。

`df <- data.table::fread("X Y
2   26
3   NA
0 0
NA  NA
4   5
", header = TRUE)
df[,Sum:=rowSums(.SD,na.rm = T), .SDcols = names(df)]`

2 个答案:

答案 0 :(得分:4)

有很多方法可以做到这一点。我的输入:

df[, Sum:= rowSums(df, na.rm = TRUE) * NA ^ (rowSums(!is.na(df)) == 0)]

会返回:

    X  Y Sum
1:  2 26  28
2:  3 NA   3
3:  0  0   0
4: NA NA  NA
5:  4  5   9

答案 1 :(得分:0)

另一种方法,仅在您不想成为NA的行上调用rowSums函数。通过引用调用分配将用NA填充其余部分:

df[, .SD
   ][Reduce('*', lapply(df, is.na)) == 0, sum := rowSums(.SD, na.rm=T)
   ][]

    X  Y sum
1:  2 26  28
2:  3 NA   3
3:  0  0   0
4: NA NA  NA
5:  4  5   9