R语言dplyr分组求和:如何避免全NA列结果转为0
解决分组求和时全NA列保留NA的问题
方法1:自定义求和逻辑,保留全NA列的NA值
直接在summarise的across里调整求和逻辑,先判断当前列是否全部为NA:
df = df %>% group_by(Participant_ID) %>% summarise(across(where(is.numeric), ~ if(all(is.na(.x))) NA else sum(.x, na.rm = TRUE)))
这个逻辑会逐列检查:如果整列都是NA,就返回NA;否则忽略NA计算分组总和,既保留了全NA列的原始状态,又能得到正常列的求和结果。
方法2:先筛选掉全NA的数值列,再分组求和
如果不需要保留全NA的列,可以先通过select过滤出至少包含一个非NA值的数值列,再执行分组求和:
df = df %>% select(Participant_ID, where(is.numeric) & where(~ any(!is.na(.x)))) %>% group_by(Participant_ID) %>% summarise(across(where(is.numeric), ~ sum(.x, na.rm = TRUE)))
这里where(~ any(!is.na(.x)))用来筛选出存在非NA值的列,配合where(is.numeric)只针对数值列操作,后续分组求和就不会出现全NA列被转为0的问题。
内容的提问来源于stack exchange,提问作者Anne-Sophie Hacquin
相关产品推荐
相关产品推荐

