首页 > 解决方案 > group_by 表并在 R 中列的总和为 0 时更改值到 NA

问题描述

我有一张桌子,并按两列分组。在每个组中,我想更改几列。如果(组中)某列的总和为 0,则该列中的每一行都应更改为 NA。最后我想要起始表,但用 NA 而不是 0。

我试过了:

table_neu <- table %>%
    group_by(A,B) %>%
    mutate_at(.vars = vars(C_01:C_12),
              .funs = funs(case_when(
                  sum(.) == 0 ~ NA,
                  TRUE ~ .)),
              na.rm = TRUE) %>%
    ungroup()

我收到此错误,不知道是什么问题。

情况 3 ( colsum(C_01) == 0 ~ NA) 必须是一个双边公式,而不是一个逻辑 vectorTraceback:

标签: rgroup-bycase-when

解决方案


尝试使用:

library(dplyr)

table_neu <- table %>%
               group_by(A,B) %>%
               mutate_at(vars(C_01:C_12),~case_when(
                                           sum(., na.rm = TRUE) == 0 ~ NA_real_,
                                           TRUE ~ .)) %>%
                ungroup()

推荐阅读