r - 计算行意味着仅针对在 R 中具有多个数据点的行

标签 r missing-data

我正在尝试计算行均值以从 3 个评估点创建平均变量。我想包括具有 2 或 3 个测量点的案例,但不包括只有一个测量点的案例。

例如,

> a <- c(1,0,NA,1,NA,0,1,0,NA,0,NA)
> b <- c(1,0,NA,1,0,1,1,1,NA,0,1)
> c <- c(1,NA,NA,0,NA,0,1,1,1,0,0)
> mydata <- data.frame(a,b,c)
> mydata$M <- rowMeans(subset(mydata, select = c(1:3)), na.rm = TRUE)
> mydata$M

当前输出为除一行之外的所有行生成一个均值列表,其中有 3 个 NA:
[1] 1.00 0.00 NaN 0.66 0.00 0.33 1.00 0.66 1.00 0.00 0.50

但是,我想要的输出是:
[1] 1.00 0.00 NaN 0.66 NaN 0.33 1.00 0.66 NaN 0.00 0.50

这样只有具有至少两个数据点的行才会用于计算平均值,而不是将单个数据点作为行平均值返回。

这是一个复杂的规则,我不知道如何定义它。任何帮助,将不胜感激。
(这是一个有几千行的数据集,所以手动做是不可想象的!)

谢谢!
苏菲

最佳答案

您可以创建一个函数,根据某些条件对行应用均值。在您的示例中,如果有两个或多个有效测量值,请计算平均值。

a <- c(1,0,NA,1,NA,0,1,0,NA,0,NA)
b <- c(1,0,NA,1,0,1,1,1,NA,0,1)
c <- c(1,NA,NA,0,NA,0,1,1,1,0,0)
mydata <- data.frame(a,b,c)

读取功能最好由内而外完成。这将采用向量 x看看有多少不是 NA。当它对 (sum) TRUE/FALSE 值求和时,它会预先将它们分别变为 1 和 0。然后,如果有超过 1 个(即 2 个或更多)值 - 不是 NA,它会执行测试。
conditionalMean <- function(x) {
  if (sum(!is.na(x)) > 1) {
    mean(x, na.rm = TRUE)
  } else {
    NA
  }
}

我们将此功能应用于您的 data.frame逐行,如 MARGIN = 1 所示.如果你有一个按列工作的函数,你可以使用 MARGIN = 2 .你可以试试看。比较 apply(mydata, MARGIN = 2, FUN = mean, na.rm = TRUE)colMeans(mydata, na.rm = TRUE) .
apply(mydata, MARGIN = 1, FUN = conditionalMean)

 [1] 1.0000000 0.0000000        NA 0.6666667        NA 0.3333333 1.0000000
 [8] 0.6666667        NA 0.0000000 0.5000000

关于r - 计算行意味着仅针对在 R 中具有多个数据点的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48270381/

相关文章:

tsql - SQL Server 插入丢失的行

r - 测试一个值在 R 中的向量中是否唯一

R Prophet add_regressor 给出奇怪的结果

r - 使用日期估算因子值

r - 利用可用数据并忽略缺失数据来构建分类器

php - 通过 PHP 调用 SQL,选择所有命令但缺少 1 个结果?

r - 如何在ggplot GLM图中指定链接函数?

r - 错误 : StatBin requires a continuous x variable the x variable is discrete. 也许你想要 stat ="count"?

r - 如何将 .sty 文件添加到 rmarkdown pdf_output

r - 如何从因子变量(和 ggplot 图表)中删除 NA?