2017-10-20 71 views
-2

:)如何通过分组数据来减少数据帧?

是否有一种简单的方法可以将某个特定的数据集合分组为一个简化的数据框?我正在考虑一个算法,但是R中有没有可用于此的函数?我试图使用dplyr,但它didin't很好地工作......

如:

enter image description here

PS:我的数据是在1GB以上的矩阵,这是,我需要一个更自动的过程。

示例数据:

structure(list(Nun = 1:6, Event = c(1L, 1L, 1L, 1L, 2L, 2L), 
    Time = structure(c(3L, 4L, 5L, 6L, 1L, 2L), .Label = c("11:34", 
    "11:36", "8:50", "8:52", "8:54", "8:56"), class = "factor"), 
    User = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("U1", 
    "U7"), class = "factor")), .Names = c("Nun", "Event", "Time", 
"User"), class = "data.frame", row.names = c(NA, -6L)) 
+0

是什么时候? 'H:M'?或'M:S'? – Psidom

+0

它是'U7'还是'U2'?并发布'dput(data)'的输出,而不是图形文件。 –

回答

1

您可以使用summarisedplyr包:

library(dplyr) 

your_data_frame %>% 
    group_by(User, Event) %>% 
    summarise(Duration = max(Time) - min(Time)) 
1

这里是data.table方式。

示例数据:

x<-structure(list(Nun = 1:6, Event = c(1L, 1L, 1L, 1L, 2L, 2L), 
    Time = structure(c(1508514600, 1508514720, 1508514840, 1508514960, 
    1508524440, 1508524560), class = c("POSIXct", "POSIXt"), tzone = ""), 
    User = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("U1", 
    "U7"), class = "factor")), .Names = c("Nun", "Event", "Time", 
"User"), row.names = c(NA, -6L), class = "data.frame") 

代码:

require(data.table) 
setDT(x) 

x[,list(Duration = max(Time)-min(Time)),by = list(Event,User)] 
    Event User Duration 
1:  1 U1 6 mins 
2:  2 U7 2 mins