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

在R中统计面板数据的个体活动频次并实现可视化的技术咨询

解答:统计个体活动数量并可视化

首先直接回答你的核心问题:是的,必须要进行分组操作——因为我们需要按每个个体(people字段)来聚合对应的活动数据,才能得到每个个体的专属统计结果。

接下来我会结合你的示例数据,一步步完成统计和可视化:

1. 准备环境与数据

先加载需要的包,并把你的示例数据整理成标准数据框:

library(dplyr)
library(ggplot2)

# 构造你的示例数据框
df <- tibble(
  people = c(1,1,1,2,2,3,3,4,4,5,5),
  activity = c(1,1,1,2,2,3,4,5,5,6,6),
  completion = c(0,0,1,0,1,1,1,0,0,0,1)
)

2. 统计个体活动数据

根据你的描述,我区分了两种常见的统计需求:

2.1 统计每个个体的总活动任务数

对应你提到的“个体4有2项任务”,这里统计的是每个个体的活动记录总数:

total_tasks_per_person <- df %>%
  group_by(people) %>%  # 按个体分组
  summarise(total_tasks = n())  # 统计每组的记录数

# 查看结果
print(total_tasks_per_person)

输出结果会显示每个个体的总任务数,比如个体4确实是2项。

2.2 统计每个个体的活动完成/未完成频次

对应你提到的“个体1的活动频次为2”(这里应该是指未完成的活动次数),我们可以按个体+完成状态分组统计:

activity_freq_per_person <- df %>%
  group_by(people, completion) %>%
  summarise(frequency = n()) %>%
  ungroup() %>%
  # 把0/1转换成更易读的标签
  mutate(completion = ifelse(completion == 1, "已完成", "未完成"))

# 查看结果
print(activity_freq_per_person)

这个结果里,个体1的未完成频次就是2,和你描述的一致。

3. 可视化直方图

3.1 总任务数的直方图

如果你想直观展示每个个体的总活动数量:

ggplot(total_tasks_per_person, aes(x = factor(people), y = total_tasks)) +
  geom_col(fill = "#4A90E2") +  # 柱状图
  labs(
    title = "每个个体的总活动任务数",
    x = "个体ID",
    y = "任务数量"
  ) +
  theme_minimal()

3.2 完成/未完成频次的分组直方图

如果要对比每个个体的完成和未完成活动频次:

ggplot(activity_freq_per_person, aes(x = factor(people), y = frequency, fill = completion)) +
  geom_col(position = "dodge") +  # 分组并列柱状图
  labs(
    title = "每个个体的活动完成/未完成频次",
    x = "个体ID",
    y = "频次",
    fill = "活动状态"
  ) +
  theme_minimal()

关于你之前代码的问题

你之前写的cllw %>% group_by(id_user) %>% count activities per person存在语法错误:

  • count()函数需要正确的参数,比如count(activity)或者直接用summarise()配合n()
  • 注意字段名的一致性:你的示例数据里是people,不是id_user,可能是笔误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:42:36