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行样本数据,我需要聚合" page"关于date和user_id的列(这是一个唯一的标识符),基本上我想安排这个数据,因为在特定的(user_ID)
我需要他访问的所有页面,在一行中的特定日期之间由" _" 。
我尝试使用这个:tabel <- dt[,.SD[,paste(page, sep=",", collapse="_")], by=date]
dt是我的数据框,但是这给了我特定日期访问过的网页,但我希望在(user_id)
级别。我如何使用R?
结果表看起来应该是这样的。(例子)
row.names date pages
217568 2015-06-12 page1,page2
217568 2015-06-13 page3,page5
page1,page2,page3,page5
是来自列&#34;页面&#34;
答案 0 :(得分:2)
你可以使用stats包中的聚合函数,尝试这样的事情:
aggregate(dt$page, list(dt$user_id, dt$date), FUN=paste, collapse=", ")
请注意日期,如果将它们存储为POSIXlt,强制因素可能会有问题,如果日期存储为POSIXct或字符串,则应该没问题。
答案 1 :(得分: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='_'))