R 中缺失值的计算

Calculations in R with Missing Values

在下面的测试数据中,v4 是从 v1、v2 和 v3 中计算出来的,如下所示:

test$v4 <- (test$v1 + test$v2 + test$v3) / 3

正如预期的那样,任何具有缺失值的行 return 都是 v4 的 NA 结果:

  v1 v2 v3       v4
1  1  1  2 1.333333
2  1  1  2 1.333333
3  1  2 NA       NA
4  0  1 NA       NA
5 NA NA  0       NA
6 NA  1  0       NA
7  1  2 NA       NA

但是,只有当有两个或三个 NA 值时,我才希望 R return 一个 NA。如果只有一个NA,我想让R计算两个可用值的平均值。

你能告诉我该怎么做吗?

谢谢。

您可以使用 ifelserowSums(is.na()) 在不同的行上使用不同的公式:

dat <- read.table(text=  "v1 v2 v3       v4
1  1  1  2 1.333333
           2  1  1  2 1.333333
           3  1  2 NA       NA
           4  0  1 NA       NA
           5 NA NA  0       NA
           6 NA  1  0       NA
           7  1  2 NA       NA")
# if more than 2 NAs in each row, NA, otherwise the mean ignoring NAs
dat$v4 <- ifelse(rowSums(is.na(dat)) >= 2, NA, rowMeans(dat, na.rm = TRUE))