You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:27:04