【发布时间】:2021-03-30 22:37:56
【问题描述】:
我有一个数据框,工作人员(约 8 个不同的职位)分配在许多(约 70 多个)不同的位置,例如
| Location | Job1 | Job2 | Job3 | Total |
|---|---|---|---|---|
| A | 1 | 2 | 3 | 6 |
| B | 4 | 5 | 6 | 7 |
我有另一个带有开口(无人值守职位)的数据框,但列的顺序不同。例如
| Location | Job2 | Job1 | Job3 | Total |
|---|---|---|---|---|
| A | 0 | 1 | 1 | 2 |
| B | 1 | 4 | 1 | 6 |
我最终是在寻找一个按位置/职位显示人员配备率的汇总表,例如
| Location | Job1 | Job2 | Job3 | Total |
|---|---|---|---|---|
| A | 0.50 | 1.00 | 0.75 | 0.75 |
| B | 0.50 | 0.83 | 0.86 | 0.54 |
到目前为止,我已经成功地将前两个表合并在一起(使用left_join,因为有些位置没有空缺职位,这些职位根本不存在于短缺表中),by = location, suffix = c(".f", ".uf") 用于填充和未填充,导致一个看起来像这样的表:
| Location | Job1.f | Job2.f | Job3.f | Total.f | Job2.uf | Job1.uf | Job3.uf | Total.uf |
|---|---|---|---|---|---|---|---|---|
| A | 1 | 2 | 3 | 6 | 0 | 1 | 1 | 2 |
| B | 4 | 5 | 6 | 7 | 1 | 4 | 1 | 6 |
问题:是否有任何方法(除了循环作业类型,如果可能,使用dplyr)根据匹配的名称更改列,例如data %>% mutate(fill_rate1 = Job1.f / (Job1.f + Job1.uf)),而无需为每个作业类型手动键入单独的行?我的倾向是应该有一些“通配符”/正则表达式匹配技术,但到目前为止我还没有运气。
编辑:下面的可重现代码
library(tidyverse)
locations <- c("A","B","C","D","E")
job1 <- c(1,2,3,4,5)
job2 <- c(6,7,8,9,10)
job3 <- c(11,12,13,14,15)
total <- c(18, 21, 24, 27, 30)
loc_uf <- c("A","B","E")
uf1 <- c(0,2,4)
uf2 <- c(3,6,9)
uf3 <- c(7,3,0)
uftotal <- c(10, 11, 13)
filled <- data_frame(locations = locations, Job1 = job1, Job2 = job2, Job3 = job3,
total = total)
unfilled <- data_frame(locations = loc_uf, Job2 = uf2, Job1 = uf1, Job3 = uf3,
total = uftotal)
merged <- left_join(filled, unfilled, by = "locations", suffix = c(".f", ".uf")) %>%
replace(is.na(.), 0)
【问题讨论】:
-
您能否分享一段可重现的数据,以便其他人使用?