【问题标题】:To understand how two aggregate() syntaxes work with data frame containing NA values [duplicate]要了解两个聚合()语法如何处理包含 NA 值的数据框[重复]
【发布时间】:2020-10-25 03:56:19
【问题描述】:

这是一个数据框的例子。

    x3 <- read.table(text = "  id1 id2 val1 val2
1   a   x    1    9
2   a   x    2    4
3   a   y    3    NA
4   a   y    4    NA
5   b   x    1    NA
6   b   y    4    NA
7   b   x    3    9
8   b   y    2    8", header = TRUE)

aggregate(. ~ id1+id2, data = x3, FUN = mean) 返回:

  id1 id2 val1 val2
1   a   x  1.5  6.5
2   b   x  3.0  9.0
3   b   y  2.0  8.0

aggregate(x3[,3:4], by = list(x3$id1, x3$id2), FUN = mean, na.rm = TRUE) 返回:

  Group.1 Group.2 val1 val2
1       a       x  1.5  6.5
2       b       x  2.0  9.0
3       a       y  3.5  NaN
4       b       y  3.0  8.0

两种聚合语法不会返回相同数量的行。是什么原因?

【问题讨论】:

  • 因为在原始df中所有val2对应的组合id1 == "a", id2 == "y"都是NA。该组在第一种情况下没有出现,但在第二种情况下出现。
  • 使用公式界面得到同样的结果:aggregate(. ~ id1+id2, data = x3, FUN = mean, na.action = na.pass, na.rm = TRUE).
  • 感谢 Rui Barradas 和 Axeman。

标签: r aggregate na


【解决方案1】:

最好在aggregate 的列表方法中使用with 和complete.cases,以预先排除您可能尝试的缺失行。

with(x3[complete.cases(x3), ], aggregate(cbind(val1, val2), by=list(id1, id2), FUN=mean))
#   Group.1 Group.2 val1 val2
# 1       a       x  1.5  6.5
# 2       b       x  3.0  9.0
# 3       b       y  2.0  8.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多