gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:43:23 24 4
gpt4 key购买 nike

我有一个类似于 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com