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

R语言按年分组统计1-9月WB系列列求和的正确实现

问题原因与解决方法

错误原因

你之前的代码把原始数据框df.100覆盖成了分组求和后的汇总表,这个汇总表已经丢失了Msc(月份)列。所以第二个across里的.[Msc <=9]根本无法筛选月份,实际还是对整列求和,导致结果和全月统计完全一致。

正确解决方法

方法1:拆分筛选与求和,合并结果

先保留原始数据,分别计算全月和1-9月的求和,再合并结果:

# 计算全月求和(不要覆盖原始数据)
df_full <- df.100 %>% 
  group_by(Rok) %>% 
  summarise(across(starts_with('WB'), ~sum(.x, na.rm = T)))

# 筛选1-9月后计算求和
df_9months <- df.100 %>% 
  filter(Msc <= 9) %>% 
  group_by(Rok) %>% 
  summarise(across(starts_with('WB'), ~sum(.x, na.rm = T), .names = "9_{col}"))

# 合并两个结果,同时展示全月与9月数据
df_combined <- left_join(df_full, df_9months, by = "Rok")

方法2:在同一分组内完成条件求和

直接在group_by后的summarise里,对每个分组内的行按月份筛选后求和(前提是原始数据未被覆盖):

df.100.9 <- df.100 %>% 
  group_by(Rok) %>% 
  summarise(
    # 全月求和
    across(starts_with('WB'), ~sum(.x, na.rm = T)),
    # 1-9月求和:针对分组内的行,筛选Msc<=9的数值再求和
    across(starts_with('WB'), ~sum(.x[Msc <= 9], na.rm = T), .names = "9_{col}")
  )

验证结果

运行上述代码后,9_WB_*列的数值会与全月求和的WB_*列产生明显差异,符合1-9月的统计逻辑。

内容的提问来源于stack exchange,提问作者GrBa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:17:39