gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:21:43 26 4
gpt4 key购买 nike

我正在尝试计算行均值以从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com