如何在R中匹配数据至指定行列(或带匹配的转置)
R实现员工班次数据宽表转换(新手友好版)
核心思路
先把分散的每日数据合并成带日期标记的长表,再转置成按日期为行、员工信息为列的宽表,最后替换缺失值。
1. 合并每日数据集
先给每个单日数据集加上Day列标记工作日编号,再合并成一个总表:
# 给各单日数据加日期列 Day1Set$Day <- 1 Day2Set$Day <- 2 # 有更多天数就继续加,比如Day3Set$Day <- 3 # 合并所有数据到一个总表 total_data <- rbind(Day1Set, Day2Set)
2. 转置成目标宽表
用tidyverse包的pivot_wider函数,这是新手最容易上手的转置工具:
# 首次使用先安装包 install.packages("tidyverse") library(tidyverse) # 转置操作:按Day分行,员工姓名作为列前缀,对应shift和work_time的值 wide_data <- total_data %>% pivot_wider( id_cols = Day, # 行维度:工作日 names_from = name, # 列名的来源:员工姓名 values_from = c(shift, work_time), # 要转置的变量 names_glue = "{name}_{.value}" # 列名格式:员工名_变量名(比如Worker1_shift) )
3. 替换缺失值为"-"
把表中无数据的NA替换成你需要的-:
wide_data[is.na(wide_data)] <- "-"
新手参考关键词
你可以搜索这些术语找更多资料:R 长表转宽表、pivot_wider 用法、R 数据合并
内容的提问来源于stack exchange,提问作者kwadratens
相关产品推荐
相关产品推荐

