首页 > 解决方案 > 如何按组对变量求和并确保组中的每个变量都是 NA 总和是 NA 而不是零?

问题描述

我有如下示例的数据:

| a | b |
|---|---|
| 1 | 1 |
| 1 | 0 |
| 2 | 1 |
| 2 | NA|
| 3 | 0 |
| 4 | NA|
| 4 | NA|
| 4 | NA|
| 5 | 1 |
| 5 | NA|
| 5 | 0 |
| 5 | 1 |
| 6 | 0 |

我需要通过求和来创建一个新的数据框ba如果组中的每个数据都是 NA,则输出应该是 NA 而不是零,如下所示:

| a | b |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 0 |
| 4 | NA|
| 5 | 2 |
| 6 | 0 |

如何在 R 中构造一个总和以使其表现得像这样?

谢谢

标签: rdataframesum

解决方案


使用基本 R 选项aggregate

aggregate(. ~ a,
  df, 
  function(x) ifelse(all(is.na(x)), NA, sum(x, na.rm = TRUE)),
  na.action = na.pass
)

  a  b
1 1  1
2 2  1
3 3  0
4 4 NA
5 5  2
6 6  0

数据

> dput(df)
structure(list(a = c(1L, 1L, 2L, 2L, 3L, 4L, 4L, 4L, 5L, 5L, 
5L, 5L, 6L), b = c(1L, 0L, 1L, NA, 0L, NA, NA, NA, 1L, NA, 0L,
1L, 0L)), class = "data.frame", row.names = c(NA, -13L))
´``

推荐阅读