按APP_ID统计非零NICE_列数量时ungroup()不生效该如何处理
解决思路
你之前的代码使用summarize_all会将每个APP_ID分组聚合为1行,输出结果的行数等于唯一APP_ID的数量,因此无论后续是否执行ungroup,都无法恢复原数据集的所有行,自然不能给重复的APP_ID行填充相同的统计值。
最优实现方案(一步完成)
使用分组后的mutate替代summarize,分组内计算的统计值会自动广播到该分组的所有行,不需要额外做表连接:
data_QI %>% arrange(APP_ID) %>% group_by(APP_ID) %>% # 统计当前APP_ID下有多少个NICE_列总和非零 mutate(APPNICENUM = sum(across(starts_with("NICE_"), ~sum(.x, na.rm = T) != 0))) %>% ungroup() # 计算完成后取消分组即可
补充说明:如果你的NICE_列不存在缺失值,可以去掉na.rm = T参数
备选实现方案(汇总后匹配回原表)
如果你已经生成了汇总统计结果,也可以通过左连接把统计值匹配回原数据集:
# 第一步:生成每个APP_ID的统计值 app_nice_stats <- data_QI %>% select(APP_ID, starts_with("NICE_")) %>% group_by(APP_ID) %>% summarise(across(everything(), sum, na.rm = T)) %>% mutate(APPNICENUM = rowSums(select(., starts_with("NICE_")) != 0)) %>% select(APP_ID, APPNICENUM) # 第二步:匹配回原数据集 data_QI <- data_QI %>% left_join(app_nice_stats, by = "APP_ID")
内容的提问来源于stack exchange,提问作者The Dark Knight
相关产品推荐
相关产品推荐

