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