【问题标题】:Aggregate by NA value in R [duplicate]按 R 中的 NA 值聚合 [重复]
【发布时间】:2016-10-12 13:44:53
【问题描述】:
x1 <- c(1, 2, 3)
x2 <- c("a", "b", "a")
x3 <- as.Date(c(NA, "2016/01/01", NA), "%Y/%m/%d")
df <- data.frame(x1,x2,x3)

当我将聚合应用于df:

aggregate(x1~x2+x3, df, sum)

结果看起来像这样,但忽略了NA 值:

x2         x3   x1
b   2016/01/01  2

所以我需要聚合NA 值并得到如下结果:

x2         x3   x1
a           NA  4
b   2016/01/01  2

有人可以帮忙吗?

【问题讨论】:

  • @jogo 也会这么说,但你必须设计一个自定义函数?
  • 我只是建议使用data.table 或其他允许您按NA 值分组的东西。喜欢library(data.table); as.data.table(df)[, sum(x1), by = .(x2, x3)]
  • @jogo,我认为这行不通。我很确定您仍然需要更改“x3”分组变量,使其不包含NA 值....
  • 确实dplyr库默认也保留NA:df %&gt;% group_by(x2, x3) %&gt;% summarise(sum(x1))
  • 抱歉,x3 应该是 x3 as.Date(x3)

标签: r


【解决方案1】:

我通过添加 NA 作为因子级别然后执行聚合来完成此操作:

x1 <- c(1, 2, 3)
x2 <- c("a", "b", "a")
x3 <- as.factor(as.Date(c(NA, "2016/01/01", NA), "%Y/%m/%d"))
x3 <- addNA(x3)
df <- data.frame(x1,x2,x3)

aggregate(x1~x2+x3, df, sum)
  x2         x3 x1
1  b 2016-01-01  2
2  a       <NA>  4

【讨论】:

  • 这真的很有帮助。非常感谢!
  • @Hao 乐于助人!
猜你喜欢
  • 2015-11-19
  • 2018-05-17
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多