使用R tidyverse从格式不佳的CSV计算会议出勤率
解决方案
要将你的会议出勤数据转换为整洁(tidy)格式,并计算个人参会百分比,你需要把宽格式的参会者列表拆分为长格式(每行对应一个日期+一个参会者),再做后续统计。以下是具体步骤:
1. 加载必要的包
我们会用到dplyr包的函数来处理数据:
library(dplyr)
2. 将宽格式转换为长格式(tidy格式)
你之前用separate_wider_delim()得到多列结果,是因为它负责把单列拆分为多列;而我们需要把单列的多个值拆分为多行,这时候应该用separate_rows()函数:
# 拆分参会者字符串为单独的行,保留对应会议日期 tidy_meetings <- meeting_tbl %>% separate_rows(attendees, sep = " / ")
执行后,tidy_meetings会变成每行对应一个会议日期和一个参会者姓名,同一会议内的重复姓名会保留为多行(比如14/12/2023的Jim Green会有两行)。
3. 处理同一会议内的重复姓名
由于同一会议中重复的姓名应该只算作一次参会(大概率是输入错误),我们可以用distinct()去除重复记录:
# 去除同一会议下的重复参会记录 tidy_meetings_unique <- tidy_meetings %>% distinct(dates, attendees, .keep_all = TRUE)
4. 计算个人参会百分比
首先统计总会议数,再计算每个人参加的会议数,最后得出百分比:
# 统计总会议次数 total_meetings <- n_distinct(meeting_tbl$dates) # 计算每个人的参会次数和百分比 attendance_summary <- tidy_meetings_unique %>% group_by(attendees) %>% summarize( 参会次数 = n(), 参会百分比 = round((参会次数 / total_meetings) * 100, 2) ) %>% arrange(desc(参会百分比))
执行后,attendance_summary会展示每个人的参会次数和对应的百分比,按百分比从高到低排序。
额外提示
- 如果你的数据是从外部CSV文件读取的,先用
readr::read_csv("你的文件路径.csv")读取数据,再执行上述步骤即可。 - 如果同一会议内的重复姓名是合法记录(比如同一人多次签到),可以跳过第3步的去重操作,但此时计算参会百分比时,要明确是按签到次数还是会议次数——通常年度报告的参会百分比是按会议次数统计,所以去重更合理。
内容的提问来源于stack exchange,提问作者Sh1v
相关产品推荐
相关产品推荐

