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

dplyr使用mutate计算行为占比时结果错误且时间列顺序混乱求助

问题原因

  • 百分比计算错误:你在计算占比前的分组逻辑有误。第二次group_by同时指定了Time、PredictedBehaviorFull、Context三个字段,导致每一行单独成为一个分组,sum(n)的结果等同于当前行的n值,最终percentage恒为1,不符合「按时间维度计算各行为占比」的需求。
  • Time列顺序错乱:你的Time列是d h格式的字符串,字符串默认按字符逐位比较排序,会出现0d 10h排在0d 2h前面的错误结果,需要转换为按时间逻辑排序的有序因子。

修正后代码

library(dplyr)
library(stringr)

# 1. 统计各分组计数
S06Behav <- S06 %>%
  group_by(Time, PredictedBehaviorFull, Context) %>%
  summarise(count = n(), .groups = "drop")

# 2. 计算占比 + 修正Time列顺序
S06Proportions <- S06Behav %>%
  # 提取总小时数用于排序
  mutate(
    day = as.integer(str_extract(Time, "\\d+(?=d)")),
    hour = as.integer(str_extract(Time, "\\d+(?=h)")),
    total_hour = day * 24 + hour
  ) %>%
  # 仅按Time分组,sum(count)即为当前时间下的总计数
  group_by(Time) %>%
  mutate(
    percentage = count / sum(count), # 如需百分比格式可乘以100
    # 把Time转成按总小时数排序的有序因子
    Time = reorder(Time, total_hour)
  ) %>%
  # 去除辅助列、按时间排序
  select(-day, -hour, -total_hour) %>%
  arrange(Time)

如果你需要的是每个Time+Context组合下的行为占比,只需要把上面的group_by(Time)改成group_by(Time, Context)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:54:03