如何投射部分 df 但仍保留其他一些列
how to Cast part of the df but still keeping some other columns
我想做的是创建一个新列来拆分任务计费并将 taskHRS 分配给该列(投射)并将小时数分配为 true 和 false,而不影响其他列。
我正在使用但未获得预期结果的代码:
Exp <- Timesheets %>%
mutate(taskDate = as.Date(taskDate)) %>%
mutate(taskMinutes = as.numeric(taskMinutes)) %>%
select('jobID', 'jobTaskID', 'taskStaffName', 'taskDate', 'taskBillable','taskMinutes', 'which_payday') %>%
group_by(jobID, taskStaffName, taskDate, taskBillable, which_payday) %>%
summarise(taskHRS = sum(taskMinutes/60)) %>%
filter(which_payday %in% c('ThisFN'))
print(Exp)
Exp <- Exp %>%
cast(taskStaffName ~ taskBillable ~ jobID, value = 'taskHRS')
期望的结果样本:
JobID taskStaffName taskDate true false which_payday Budget
W20100 L 2/10/2018 2 1 ThisFN 80
数据样本:
jobID taskStaffName taskDate taskBillable which_payday taskHRS Budget
<chr> <chr> <date> <chr> <chr> <dbl> <dbl>
1 W210125 L 2018-11-13 true ThisFN 1.5 80
2 W210125 R 2018-11-12 true ThisFN 2 80
3 W210125 R 2018-11-13 true ThisFN 2 80
4 W210125 T 2018-11-13 true ThisFN 2 80
5 W210233 C 2018-11-12 true ThisFN 6 80
好吧,我找到了解决这个问题的方法。我创建了以下代码来实现我想要的结果。
图书馆(整理)
Exp <- Timesheets %>%
mutate(taskDate = as.Date(taskDate)) %>%
mutate(taskMinutes = as.numeric(taskMinutes)) %>%
select('jobID', 'jobTaskID', 'taskStaffName', 'taskDate', 'taskBillable','taskMinutes', 'which_payday') %>%
group_by(jobID, taskStaffName, taskDate, taskBillable, which_payday) %>%
summarise(taskHRS = sum(taskMinutes/60))
library(tidyr)
Exp <- Exp %>%
spread(taskBillable, taskHRS)
我希望这可以帮助任何正在处理类似问题的人。
结果如我所愿
JobID taskStaffName taskDate true false which_payday Budget
W20100 L 2/10/2018 2 1 ThisFN 80*
我想做的是创建一个新列来拆分任务计费并将 taskHRS 分配给该列(投射)并将小时数分配为 true 和 false,而不影响其他列。
我正在使用但未获得预期结果的代码:
Exp <- Timesheets %>%
mutate(taskDate = as.Date(taskDate)) %>%
mutate(taskMinutes = as.numeric(taskMinutes)) %>%
select('jobID', 'jobTaskID', 'taskStaffName', 'taskDate', 'taskBillable','taskMinutes', 'which_payday') %>%
group_by(jobID, taskStaffName, taskDate, taskBillable, which_payday) %>%
summarise(taskHRS = sum(taskMinutes/60)) %>%
filter(which_payday %in% c('ThisFN'))
print(Exp)
Exp <- Exp %>%
cast(taskStaffName ~ taskBillable ~ jobID, value = 'taskHRS')
期望的结果样本:
JobID taskStaffName taskDate true false which_payday Budget
W20100 L 2/10/2018 2 1 ThisFN 80
数据样本:
jobID taskStaffName taskDate taskBillable which_payday taskHRS Budget
<chr> <chr> <date> <chr> <chr> <dbl> <dbl>
1 W210125 L 2018-11-13 true ThisFN 1.5 80
2 W210125 R 2018-11-12 true ThisFN 2 80
3 W210125 R 2018-11-13 true ThisFN 2 80
4 W210125 T 2018-11-13 true ThisFN 2 80
5 W210233 C 2018-11-12 true ThisFN 6 80
好吧,我找到了解决这个问题的方法。我创建了以下代码来实现我想要的结果。
图书馆(整理)
Exp <- Timesheets %>%
mutate(taskDate = as.Date(taskDate)) %>%
mutate(taskMinutes = as.numeric(taskMinutes)) %>%
select('jobID', 'jobTaskID', 'taskStaffName', 'taskDate', 'taskBillable','taskMinutes', 'which_payday') %>%
group_by(jobID, taskStaffName, taskDate, taskBillable, which_payday) %>%
summarise(taskHRS = sum(taskMinutes/60))
library(tidyr)
Exp <- Exp %>%
spread(taskBillable, taskHRS)
我希望这可以帮助任何正在处理类似问题的人。
结果如我所愿
JobID taskStaffName taskDate true false which_payday Budget
W20100 L 2/10/2018 2 1 ThisFN 80*