gpt4 book ai didi

r - 使用聚合的 na.omit 和 na.pass 的混合?

转载 作者:行者123 更新时间:2023-12-04 13:16:49 25 4
gpt4 key购买 nike

我有一个包含产品原型(prototype)测试数据的数据集。并非所有测试都在所有批处理上运行,并且并非所有测试都使用相同的样本量执行。为了说明,考虑这种情况:

> test <- data.frame(name = rep(c("A", "B", "C"), each = 4),
var1 = rep(c(1:3, NA), 3),
var2 = 1:12,
var3 = c(rep(NA, 4), 1:8))

> test
name var1 var2 var3
1 A 1 1 NA
2 A 2 2 NA
3 A 3 3 NA
4 A NA 4 NA
5 B 1 5 1
6 B 2 6 2
7 B 3 7 3
8 B NA 8 4
9 C 1 9 5
10 C 2 10 6
11 C 3 11 7
12 C NA 12 8

过去,我只需要处理不匹配重复的情况,使用 aggregate(cbind(var1, var2) ~ name, test, FUN = mean, na.action = na.omit) 很容易。 (或默认设置)。我将获得 var1 三个值的每手的平均值。以及超过四个 var2 的值.

不幸的是,这将使我的数据集完全丢失 A在这种情况下:
 aggregate(cbind(var1, var2, var3) ~ name, test, FUN = mean, na.action = na.omit)
name var1 var2 var3
1 B 2 6 2
2 C 2 10 6

如果我使用 na.pass ,但是,我也没有得到我想要的:
 aggregate(cbind(var1, var2, var3) ~ name, test, FUN = mean, na.action = na.pass)
name var1 var2 var3
1 A NA 2.5 NA
2 B NA 6.5 2.5
3 C NA 10.5 6.5

现在我丢失了我在 var1 中的好数据因为它包含 NA 的实例.

我想要的是:
  • NA作为 mean() 的输出如果 varN 的所有唯一组合~ nameNA小号
  • mean() 的输出如果 varN 有一个或多个实际值~ name

  • 我猜这很简单,但我只是不知道如何。我需要使用 ddply对于这样的事情?如果是这样...我倾向于避免它的原因是我最终写了很长的等价于 aggregate()像这样:
    ddply(test, .(name), summarise,
    var1 = mean(var1, na.rm = T),
    var2 = mean(var2, na.rm = T),
    var3 = mean(var3, na.rm = T))

    是的......所以结果显然符合我的要求。无论如何我都会留下这个问题,以防有 1) 使用 aggregate() 的方法来做到这一点。或 2) ddply 的更短语法.

    最佳答案

    通过na.action=na.passna.rm=TRUEaggregate .前者告诉aggregate不要删除存在 NA 的行;后者告诉 mean忽略它们。

    aggregate(cbind(var1, var2, var3) ~ name, test, mean,
    na.action=na.pass, na.rm=TRUE)

    关于r - 使用聚合的 na.omit 和 na.pass 的混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17737174/

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