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

在R中实现按星期几统计骑行记录占比的方法问询

问题描述

正在完成Coursera上的共享单车案例研究,使用R语言处理某共享单车公司的骑行日志数据框,希望生成按星期几划分的会员(member)与临时用户(casual)骑行记录占比的数据框或柱状图。目前尝试分组计数但不知如何计算整体占比,现有代码如下:

weekday_by_member <- p12m %>%
    filter(member_casual=="member") %>%
    count(weekday) 
sorted_weekday_by_member <- arrange(weekday_by_member,levels = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"))

sorted_weekday_by_member


weekday_by_casual <- p12m %>%
    filter(member_casual=="casual") %>%
    count(weekday) 
sorted_weekday_by_casual <- arrange(weekday_by_casual,levels = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"))

sorted_weekday_by_casual


weekday_mem_cas <- p12m %>%
    group_by (member_casual) %>%
    count(weekday) 

weekday_mem_cas
最简实现方法

1. 生成占比数据框

用dplyr一步完成分组计数、占比计算与排序,避免冗余代码:

library(dplyr)

# 按星期内占比计算(每天中会员/临时用户的占比)
weekday_ratio <- p12m %>%
  # 按星期+用户类型分组计数
  group_by(weekday, member_casual) %>%
  summarise(count = n(), .groups = "drop") %>%
  # 按星期分组,计算每组内的占比(百分比)
  group_by(weekday) %>%
  mutate(ratio = round(count / sum(count) * 100, 2)) %>%
  # 指定星期顺序,避免默认字符排序
  mutate(weekday = factor(weekday, levels = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))) %>%
  arrange(weekday)

weekday_ratio

输出的数据框将包含weekday(星期几)、member_casual(用户类型)、count(骑行记录数)、ratio(占比%)四个字段。

如果需要计算整体所有记录中的占比(即每周几的某类用户占总骑行量的比例),只需去掉计算占比时的group_by(weekday):

overall_ratio <- p12m %>%
  group_by(weekday, member_casual) %>%
  summarise(count = n(), .groups = "drop") %>%
  mutate(ratio = round(count / sum(count) * 100, 2)) %>%
  mutate(weekday = factor(weekday, levels = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))) %>%
  arrange(weekday)

2. 生成占比柱状图

用ggplot2快速绘制可视化图表:

library(ggplot2)

# 堆叠柱状图:展示每天内两类用户的占比结构
ggplot(weekday_ratio, aes(x = weekday, y = ratio, fill = member_casual)) +
  geom_col() +
  labs(title = "按星期划分的会员/临时用户骑行占比",
       x = "星期几",
       y = "占比(%)",
       fill = "用户类型") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# 分组柱状图:对比每天两类用户的占比
ggplot(weekday_ratio, aes(x = weekday, y = ratio, fill = member_casual)) +
  geom_col(position = "dodge") +
  labs(title = "按星期划分的会员/临时用户骑行占比",
       x = "星期几",
       y = "占比(%)",
       fill = "用户类型") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:42:40