我正在尝试计算3列的加权平均值,其中根据每行缺失值的数量来确定权重。
一个可重复的例子:
#一些模拟数据
N <-50df&lt; …
你需要改变第一个条件 if 在你的功能:
if
wa_func <- function(x, y, z) { if (!(is.na(x) | is.na(y) | is.na(z))) { wt_avg <- (a / i) * x + (b / i) * y + (c / i) * z } else if (!is.na(x) & !is.na(y) & is.na(z)) { wt_avg <- (a / (i - c)) * x + (b / (i - c)) * y } else if (!is.na(x) & is.na(y) & is.na(z)) { wt_avg <- a / (i - (b + c)) * x } return(wt_avg) }
您可以改善功能,因此您不需要 mapply 通过包装你的功能 Vectorise() :
mapply
Vectorise()
wa_func <- Vectorize(function(x, y, z) { a <- 5 # part of the function? b <- 3 c <- 2 i <- 10 if (!(is.na(x) | is.na(y) | is.na(z))) { (a / i) * x + (b / i) * y + (c / i) * z } else if (!is.na(x) & !is.na(y) & is.na(z)) { (a / (i - c)) * x + (b / (i - c)) * y } else if (!is.na(x) & is.na(y) & is.na(z)) { a / (i - (b + c)) * x } # no need for return() })