r - 如何在 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
解决方案
也许是这样的?
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
值)。
推荐阅读
- javascript - 在ajax之前点击设置输入的Javascript
- c - 在 C 中存储前导零
- python - 由 Python Websocket-client Flumoxed
- javascript - 将 oninput 添加到输入标签后提交不起作用
- node.js - 如何将 Node 10 应用程序打包为 macOS 的可签名可执行文件?
- xcode - Firebase/AdMob 导致 Pod 过时失败
- c# - 使用 C# 对象创建 XML
- ruby-on-rails - 如何将工厂包装在一个块中?
- php - 如何在嵌套的 WITH 中执行两个子句 WHERE
- linkedin - LinkedIn 会员资料插件不起作用