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

R语言按条件分组统计生成新变量结果错误如何解决?

问题原因

你的代码核心错误是sum()函数的参数拼写错误:
R中sum()函数控制是否移除NA值的参数为*na.rm*,你在统计a、b、c三类分类时长时,误将参数写为*na.r*,该无效参数会被sum()忽略。如果你的原始数据存在NA值,错误的参数会导致NA无法被正常移除;即使无NA值,当某类view在对应日期没有观测记录时,也可能因为逻辑兼容性问题得到不符合预期的结果。

你第一段统计总时长的代码也存在语法疏漏:summarise()函数调用后缺少右括号,运行时会直接触发语法报错,你可以补充右括号保证代码可正常执行。

修正后的代码

修改参数拼写即可得到预期结果:

library(dplyr)
df2 <- df1 %>%
  group_by(date) %>%
  summarise(duration_sum = sum(duration_hours, na.rm = TRUE),
            a = sum(duration_hours[view == "a"], na.rm = TRUE),
            b = sum(duration_hours[view == "b"], na.rm = TRUE),
            c = sum(duration_hours[view == "c"], na.rm = TRUE))

如果后续view的分类增多,你可以用长表转宽表的写法简化代码,避免手动逐个定义分类字段:

library(dplyr)
library(tidyr)

# 先按日期+view分组统计单类时长
df_category <- df1 %>%
  group_by(date, view) %>%
  summarise(duration = sum(duration_hours, na.rm = TRUE), .groups = "drop") %>%
  # 长转宽,无数据的分类自动填充0
  pivot_wider(names_from = view, values_from = duration, values_fill = 0)

# 统计每日总时长后合并
df_total <- df1 %>%
  group_by(date) %>%
  summarise(duration_sum = sum(duration_hours, na.rm = TRUE))

df2 <- left_join(df_total, df_category, by = "date")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 06:15:06