首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在执行计算时将单个数据帧行拆分为多行

在执行计算时将单个数据帧行拆分为多行
EN

Stack Overflow用户
提问于 2018-06-05 07:48:29
回答 1查看 561关注 0票数 5

我有一个类似于df1的df,其中我想要将行分开,以便小时列以4为间隔显示,如df2所示。我该如何解决这个问题?推荐哪些包?

ID在给定的一天中可以有多个序列。例如,一个ID可以在给定的一天中列出2-3次,被分配多个单元和多个代码。

以下是必需的:

  • 所有分类数据在子行上必须保持相同(例如,代码在每个子行上保持相同)
  • 如果存在小于4的余数,则应在最后一行列出余数(例如,df2;行B)
  • 如果子行在下一个日期开始或结束,则应相应地更新日期列(例如,df2;行E)

df1 (当前)

EMPLID TIME_RPTG_CD START_DATE_TIME     END_DATE_TIME       Hrs_Time_Worked
   <chr>  <chr>        <dttm>              <dttm>                        <dbl>
 1 X00007 REG          2014-07-03 16:00:00 2014-07-03 02:00:00            10.0

df2 (所需)

 EMPLID TIME_RPTG_CD START_DATE_TIME     END_DATE_TIME       Hrs_Time_Worked
   <chr>  <chr>        <dttm>              <dttm>                        <dbl>
1 X00007 REG          2014-07-03 16:00:00 2014-07-03 20:00:00            4.0
1 X00007 REG          2014-07-03 20:00:00 2014-07-04 24:00:00            4.0
1 X00007 REG          2014-07-04 24:00:00 2014-07-04 02:00:00            2.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 08:38:20

library(tidyverse)
library(lubridate)
df1%>%
 group_by(Row)%>%
 mutate(S=paste(START_DATE,START_TIME),
        HOURS=list((n<-c(rep(4,HOURS%/%4),HOURS%%4))[n!=0]))%>%
 unnest()%>%
 mutate(E=dmy_hm(S)+hours(cumsum(HOURS)),
        S=E-hours(unlist(HOURS)),
        START_DATE=format(S,"%d-%b-%y"),
        END_DATE=format(E,"%d-%b-%y"),
        START_TIME=format(S,"%H:%M"),
        END_TIME=format(E,"%H:%M"),S=NULL,E=NULL)
# A tibble: 6 x 9
# Groups:   Row [3]
  Row      ID UNIT  CODE  START_DATE END_DATE  START_TIME END_TIME HOURS
  <chr> <int> <chr> <chr> <chr>      <chr>     <chr>      <chr>    <dbl>
1 A         1 3ESD  REG   06-Aug-14  06-Aug-14 01:00      05:00       4.
2 A         1 3ESD  REG   06-Aug-14  06-Aug-14 05:00      07:00       2.
3 B         2 3E14E OE2   12-Aug-14  13-Aug-14 21:00      01:00       4.
4 C         3 3E5E  REG   19-Aug-14  20-Aug-14 21:00      01:00       4.
5 C         3 3E5E  REG   20-Aug-14  20-Aug-14 01:00      05:00       4.
6 C         3 3E5E  REG   20-Aug-14  20-Aug-14 05:00      07:00       2.
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50690217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档