2017-10-20 67 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