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)