在下面的测试数据中,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计算两个可用值的平均值。
你能告诉我怎么做吗?
谢谢。
答案 0 :(得分:1)
您可以使用ifelse
和rowSums(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))