r - 执行计算时将单个数据框行拆分为多行

标签 r dataframe split rows calculated-columns

我有一个类似于 df1 的 df,我想在其中拆分行,以便 HOURS 列的间隔为 4,如 df2 所示。我将如何解决这个问题以及推荐哪些软件包?

在某一天,ID 可以有多个序列。例如,一个 ID 在某一天可以被列出 2-3 次,被分配一个以上的单位和一个以上的 CODE。

以下是必需的:

  • 所有分类数据在子行上必须保持不变(例如,CODE 在每个子行上保持不变)
  • 如果余数小于 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
    

    最佳答案

    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.
    

    关于r - 执行计算时将单个数据框行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50690217/

    相关文章:

    python - 如何在 Seaborn lmplot 中使用 pandas DataFrame 作为数据参数

    python - 如何根据条件拆分列

    linux - 替代创建多部分 .tar.gz 文件?

    r - 如何创建子集的组合,使得最终集合没有重复元素

    r - R 中的继承

    python - rpy2 支持毫秒时间戳和带时区的时间戳吗?

    r - 循环访问变量向量

    r - 从数据帧列表创建平均数据帧

    r-动态检测excel列名格式为日期(没有df切片)

    python - 循环出现负值时使用python将一个值列表拆分为两个列表