R 将一系列事件转换为持续时间
我对编程并不陌生,但对R非常陌生。我有一个CSV,上面有开和关事件,如下所示:R 将一系列事件转换为持续时间,r,R,我对编程并不陌生,但对R非常陌生。我有一个CSV,上面有开和关事件,如下所示: event_time user_id on 1 2016-01-29 05:23:32 Z388FPKNEAQF FALSE 2 2016-01-29 05:23:19 Z388FPKNEAQF TRUE 3 2016-01-29 05:13:24 Z388FPKNEAQF FALSE 4 2016-01-29 05:13:09 Z388FPKNEAQF TRUE 5 201
event_time user_id on
1 2016-01-29 05:23:32 Z388FPKNEAQF FALSE
2 2016-01-29 05:23:19 Z388FPKNEAQF TRUE
3 2016-01-29 05:13:24 Z388FPKNEAQF FALSE
4 2016-01-29 05:13:09 Z388FPKNEAQF TRUE
5 2016-01-29 05:13:07 Z388FPKNEAQF FALSE
6 2016-01-29 05:00:05 Z388FPKNEAQF TRUE
为了让您了解数据,第1行和第2行表示用户在05:23:19打开屏幕,然后在05:23:19关闭屏幕。我想写一些R来将其转换成一个框架,其中来自源框架的行被折叠成持续时间。即,第1行和第2行将折叠为一行,如下所示:
event_start user_id duration
1 2016-01-29 05:23:19 Z388FPKNEAQF 12
我正在努力研究如何用R实现。在Python这样的语言中,用某种形式的循环来实现这一点是很自然的,但在R中,使用Reduce似乎更为惯用,也许?然而,我一点也不理解它的语法是什么样子的,我希望能得到一些指导来让我继续 像这样:
df <- read.table(header=T, sep=",", text="
event_time,user_id,on
1,2016-01-29 05:23:32,Z388FPKNEAQF,FALSE
2,2016-01-29 05:23:19,Z388FPKNEAQF,TRUE
3,2016-01-29 05:13:24,Z388FPKNEAQF,FALSE
4,2016-01-29 05:13:09,Z388FPKNEAQF,TRUE
5,2016-01-29 05:13:07,Z388FPKNEAQF,FALSE
6,2016-01-29 05:00:05,Z388FPKNEAQF,TRUE")
df$event_time <- as.POSIXct(df$event_time)
aggregate(
event_time~.,
data = transform(df, on=cumsum(!df$on)),
FUN = function(x) max(x)-min(x)
)
# user_id id event_time
# 1 Z388FPKNEAQF 1 13.00000
# 2 Z388FPKNEAQF 2 15.00000
# 3 Z388FPKNEAQF 3 13.03333
df这给了我一个错误:总结中的错误。因子(c(6L,5L),na.rm=FALSE):“max”对因子没有意义