R语言 如果所有值均为NA,则按组汇总将返回0而不是NA

doinxwow  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(393)
library(dplyr)

dat <- 
data.frame(id = rep(c(1,2,3,4), each = 3),
           value = c(NA, NA, NA, 0, 1, 2, 0, 1, NA, 1, 2,3))

dat %>%
  dplyr::group_by(id) %>%
  dplyr::summarise(value_sum = sum(value, na.rm = T))

# A tibble: 4 x 2
id value_sum
 1         0
 2         3
 3         1
 4         6

如果一个组中的所有条目都是NA,有什么方法可以返回NA吗?例如,id 1的所有条目都是NA,所以我希望value_sum也是NA。

# A tibble: 4 x 2
  id value_sum
  1         NA
  2         3
  3         1
  4         6
nuypyhwy

nuypyhwy1#

一种方法是使用if/else语句:如果全部为Na,则返回NA,否则返回sum():

dat %>%
  dplyr::group_by(id) %>%
  #dplyr::summarise(value_sum = sum(value, na.rm = F)) %>% 
  summarise(number = if(all(is.na(value))) NA_real_ else sum(value, na.rm = TRUE))
id number
  <dbl>  <dbl>
1     1     NA
2     2      3
3     3      1
4     4      6
fjaof16o

fjaof16o2#

我们可以使用fsum

library(collapse)
fsum(dat$value, g = dat$id)
 1  2  3  4 
NA  3  1  6

或使用dplyr

library(dplyr)
 dat %>%
   group_by(id) %>% 
   summarise(number = fsum(value))
# A tibble: 4 × 2
     id number
  <dbl>  <dbl>
1     1     NA
2     2      3
3     3      1
4     4      6

相关问题