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

R语言使用group_by按年月统计tipo_dia数量遇到的问题

问题原因说明
  • 第一种写法报错是因为tipo_dia是字符类型变量,sum()无法对字符串执行求和运算,因此触发报错。
  • 第二种写法结果全为1是因为你已经将año、mes、tipo_dia三个变量作为分组依据,每个分组内的tipo_dia取值唯一,unique(tipo_dia)的长度必然是1,因此得到的统计值全部为1。
正确实现代码

场景1:统计每个分组下的总观测行数

如果需要统计的是该分组下所有数据的行数,直接使用dplyr内置的n()函数即可:

library(dplyr)
result <- df %>%
  group_by(año, mes, tipo_dia) %>%
  summarise(tipo_dia_conteo = n(), .groups = "drop")

其中.groups = "drop"参数用于关闭summarise默认保留的分组结构,避免后续操作出现不必要的警告。

场景2:统计每个分组下的独立日期数

如果你的数据中同一日期存在多条观测,需要避免重复计数,可以用n_distinct()统计唯一日期的数量:

library(dplyr)
result <- df %>%
  group_by(año, mes, tipo_dia) %>%
  summarise(tipo_dia_conteo = n_distinct(fecha), .groups = "drop")
可选:转换为宽表展示

如果想要将不同tipo_dia作为单独列展示,方便逐月对比,可以搭配tidyr的pivot_wider()实现:

library(dplyr)
library(tidyr)
result_wide <- df %>%
  group_by(año, mes, tipo_dia) %>%
  summarise(tipo_dia_conteo = n(), .groups = "drop") %>%
  pivot_wider(
    names_from = tipo_dia, 
    values_from = tipo_dia_conteo, 
    values_fill = 0 # 不存在的类型默认填充0
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:54:00