【问题标题】:Accounting for Time in R在 R 中计算时间
【发布时间】:2018-10-22 18:40:02
【问题描述】:

我在数据框中有 2 个周期(1 和 2)的时间日志。我需要根据第三列“输入”与“输出”来计算每个人累积的时间。然后,我需要创建一个额外的列来跟踪两个期间的累积时间总和。

Period   Time        Subs
  1      10:00      'Peter in'
  1        .    
  1        .     
  1       8:00      'Peter out' #In this period he has accumulated 2 minutes
  2      10:00      'Peter in'
  2        .
  2       2:00      'Peter out' #In this period he has accumulated 8 minutes 

我知道我需要使用 if 和 ifelse 语句,但我不知道如何开始。我开始和停止学习 R,现在我试图从上次中断的地方重新开始。

【问题讨论】:

    标签: r dataframe if-statement time


    【解决方案1】:

    当然,这在很大程度上取决于数据的格式。如果你有类似的东西

    df <- data.frame(Period=c(1,1,1,1,2,2,2), Time=c("10:00",NA,NA,"8:00","10:00",NA,"2:00"))
    
    > df
      Period  Time
    1      1 10:00
    2      1  <NA>
    3      1  <NA>
    4      1  8:00
    5      2 10:00
    6      2  <NA>
    7      2  2:00
    

    如果Time 变量被格式化为字符,您可以像这样去掉分钟列:

    df$Min <- as.numeric(sapply(strsplit(as.character(df$Time), ":"), "[[", 1))
    
    > df
      Period  Time Min
    1      1 10:00  10
    2      1  <NA>  NA
    3      1  <NA>  NA
    4      1  8:00   8
    5      2 10:00  10
    6      2  <NA>  NA
    7      2  2:00   2
    

    如果您可以将Min 列作为数字,这会容易得多!

    然后,在tapply() 调用中,返回每个周期累积的总时间的简单方法是每个周期的rangediff

    tapply(df$Min, df$Period, function(x) diff(range(x, na.rm=T)))
    1 2 
    2 8 
    

    【讨论】:

    • 太棒了!我要试一试。我会让你知道它是怎么回事,但到目前为止看起来这正是我所需要的。感谢您抽出宝贵时间帮助@MattTyers!
    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2018-02-27
    相关资源
    最近更新 更多