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计算两个可用值的平均值。
你能告诉我该怎么做吗?
谢谢。
您可以使用 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))
在下面的测试数据中,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计算两个可用值的平均值。
你能告诉我该怎么做吗?
谢谢。
您可以使用 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))