【问题标题】:how to Cast part of the df but still keeping some other columns如何投射 df 的一部分但仍保留其他一些列
【发布时间】:2019-04-16 22:05:28
【问题描述】:

我想要做的是创建一个新列,将任务计费拆分并将 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

【问题讨论】:

  • "doesn't work in R 3.5.1" 正在做出一个相当广泛和明确的声明,即错误在 R 与您的代码中.请解释一下您是如何得出这个明确的结论的?
  • 这是我的错误,我确实有 reshape 但仍然面临无法保留部分数据的问题
  • 我建议您正确拼写包裹名称。
  • 我知道,那是我的错误。但是,仍然不知道如何获得我想要的结果。如果有人可以帮助我,我将不胜感激

标签: r casting reshape melt


【解决方案1】:

嗯,我找到了解决这个问题的方法。我创建了以下代码来实现我想要的结果。

图书馆(tidyr)

 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*

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2021-08-05
    • 2013-04-05
    • 2020-07-24
    • 2020-04-21
    • 2011-01-08
    相关资源
    最近更新 更多