R中的计算缺失值

时间:2016-03-12 02:11:47

标签: r missing-data

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

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

正如预期的那样,任何缺少值的行都会返回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

但是,我希望R仅在有两个或三个NA值时才返回NA。如果只有一个NA,我希望R计算两个可用值的平均值。

你能告诉我怎么做吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用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))