在R中占时间

时间:2018-10-22 18:40:02

标签: r dataframe if-statement time

我在数据帧中有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的过程,现在我正尝试从上次停止的地方重新学习。

1 个答案:

答案 0 :(得分:0)

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

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列设置为数字,则更加容易!

然后,一种简单的返回每个周期累计时间的简单方法是在diff调用内每个周期range的{​​{1}}。

tapply()