在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
相关产品推荐
相关产品推荐

