首页 > 解决方案 > 如何在 R 中对 rowMeans 进行条件计算?

问题描述

我想跨多个变量计算 rowMeans,但前提至少存在 80% 的数据。在第一个示例中,应仅计算第一行的平均值。在第二种情况下,不应计算均值。我该如何做到这一点?

x <- c(1, 2)
y <- c(1, 2)
z <- c(1, NA)
z1 <- c(1, NA)
z2 <- c(1, NA)
df <- data.frame(x, y, z, z1, z2)
df$means <- rowMeans(df)
df

  x y  z z1 z2 means
1 1 1  1  1  1     1
2 2 2 NA NA NA    NA

x <- c(1, 2)
y <- c(1, 2)
z <- c(1, 2)
z1 <- c(1, 2)
z2 <- c(1, NA)
df <- data.frame(x, y, z, z1, z2)
df$means <- rowMeans(df)
df

   x  y   z z1 z2    means
1  1  1   1  1  1      1
2  2  2   2  2  NA     2

标签: r

解决方案


也许是这样的?

transform(df, means = apply(df, 1, function(x)
    ifelse(sum(is.na(x)) / length(x) < 0.2, mean(x, na.rm = T), NA)))
#  x y  z z1 z2 means
#1 1 1  1  1  1     1
#2 2 2 NA NA NA    NA

说明:我们计算NA每行 s 的分数,并且仅在分数小于 0.2 时返回行均值(即该行包含至少 80% 的非NA值)。


推荐阅读