R中具有相同类别的子集的聚合

R中具有相同类别的子集的聚合,r,R,我的意见是: UserName Date Time Module ActiveTime A 5/20/2015 10:00 E1 5 A 5/20/2015 10:01 E1 2 A 5/20/2015 10:02 O1 2 A 5/20/2015 10:05 Exp 4 A 5/20/2015 10:06 Exp 3 A 5/20/2015 10:06 O1 2 A 5/20/2015

我的意见是:

UserName    Date    Time    Module  ActiveTime
A   5/20/2015   10:00   E1  5
A   5/20/2015   10:01   E1  2
A   5/20/2015   10:02   O1  2
A   5/20/2015   10:05   Exp 4
A   5/20/2015   10:06   Exp 3
A   5/20/2015   10:06   O1  2
A   5/20/2015   10:06   Exp 5
A   5/20/2015   10:06   EXC 1
A   5/20/2015   10:06   EXC 2
A   5/20/2015   10:06   NOTE    1
B   5/20/2015   10:00   mstsc   3
B   5/20/2015   10:01   mstsc   4
B   5/20/2015   10:02   NOTE    1
B   5/20/2015   10:05   Exp 5
B   5/20/2015   10:06   Exp 1
B   5/20/2015   10:06   EXC 2
B   5/20/2015   10:06   Exp 5
B   5/20/2015   10:07   EXC 1
B   5/20/2015   10:08   EXC 2
现在,我想为模块类别添加活动时间,直到“我的模块”不适用于所有组。因此,输出如下所示:

UserName    Date    Time    Module  ActiveTime
A   5/20/2015   10:00   E1  7
A   5/20/2015   10:02   O1  2
A   5/20/2015   10:05   Exp 7
A   5/20/2015   10:06   O1  2
A   5/20/2015   10:06   Exp 5
A   5/20/2015   10:06   EXC 3
A   5/20/2015   10:06   NOTE    1
B   5/20/2015   10:00   mstsc   7
B   5/20/2015   10:02   NOTE    1
B   5/20/2015   10:05   Exp 6
B   5/20/2015   10:06   EXC 2
B   5/20/2015   10:06   Exp 5
B   5/20/2015   10:07   EXC 3
任何建议或想法。

试试这个

假设数据帧名称为df,则

*逻辑*

-将时间转换为分钟

-计算每个用户名、日期和模块的ActiveTime和最小分钟数之和


-将分钟数转换回hh:mm格式。

@Akrun,我想OP只是希望sumActiveTime和minTime按用户名、日期和时间分组Module@dimitris_ps你可以把它贴出来作为答案。我没有试过。
install.packages("dplyr") #do once if you don't have this library installed
install.packages("lubridate") #do once if you don't have this library installed

library(dplyr); library(lubridate)
newDf <- df %>% mutate(Time=hour(hm(Time))*60 + minute(hm(Time))) %>%
                group_by(UserName, Date, Module) %>% 
                summarise(Time=min(Time), ActiveTime=sum(ActiveTime)) %>% 
                mutate(Time=paste0(Time %/% 60, ":", 
                       ifelse(nchar(mod(Time, 60))==1, 
                              paste0("0", mod(Time, 60)), mod(Time, 60)))) %>% 
               select(UserName, Date, Time, Module, ActiveTime) %>% ungroup

View(newDf)