2015-06-22 112 views
2
user_id date  datetime page 
217568 6/12/2015 49:23.9 Vodafone | How to get in touch with Vodafone 
135437 6/10/2015 43:35.7 My Vodafone â€「 Manage your Vodafone Pay Monthly Account Online â€「 Vodafone 
196094 6/13/2015 33:39.4 Check the status of Vodafone’s mobile network in real-time 
74197 6/6/2015 52:46.1 undefined 
153501 6/5/2015 02:55.5 Device Details 
71459 6/4/2015 54:05.5 
90906 6/9/2015 35:41.7 Vodafone | Mobile Phones 
30886 6/9/2015 15:59.8 Vodafone | Mobile Phones 
217568 6/9/2015 10:52.9 Vodafone | Mobile Phones 
137324 6/16/2015 40:51.7 Vodafone | How to get in touch with Vodafone 

這是我有樣本數據的前10行,我需要關於日期和user_id(這是一個唯一標識符)的「頁面」列聚合,基本上我想安排這個數據作爲,在一個特定的(user_ID)我需要他訪問的所有頁面在一行中用「_」分隔的特定日期。 我試過使用這個:tabel <- dt[,.SD[,paste(page, sep=",", collapse="_")], by=date] dt是我的數據框,但是這給了我訪問特定日期的頁面,但我想在(user_id)的水平。我怎樣才能達到這個使用R?R中的數據彙總

結果表應該是這個樣子(例如)

row.names date  pages 
217568  2015-06-12 page1,page2 
217568  2015-06-13 page3,page5 

page1,page2,page3,page5從列「頁」是頁

+0

嘗試'庫(data.table); setDT(DF1),列表(頁=的toString(頁)),列表(USER_ID ,date = as.Date(date,'%m /%d /%Y'))]'或將'toString'更改爲'paste(page,collapse =「_」)' – akrun

回答

1

使用data.table

library(data.table) 
setDT(df1)[, list(pages=paste(page, collapse="_")), 
      list(user_id, date=as.Date(date, '%m/%d/%Y'))] 

或者使用dplyr

library(dplyr) 
df1 %>% 
    group_by(user_id, date=as.Date(date, '%m/%d/%Y')) %>% 
    summarise(pages=paste(page, collapse='_')) 
+0

謝謝,我錯過了「 「在我的代碼 – PSraj

+0

的參數的一部分dplyr解決方案拋出此錯誤:」列'datetime'不支持類型:POSIXlt,POSIXt「 – PSraj

+0

@ PSraj我認爲'dplyr'不支持'POSIXlt'。因此,使用'as.POSixct(df1 $ date)'轉換爲'POSIXct' – akrun

2

您可以使用聚合函數從統計包,嘗試是這樣的:

aggregate(dt$page, list(dt$user_id, dt$date), FUN=paste, collapse=", ") 

小心日期,不過,如果您將它們保存爲POSIXlt的脅迫因素可能是有問題的,如果日期的重新存儲爲POSIXct或字符串,這應該沒有問題。