如何将行与某些条件结合起来?

How to combine row with some condition?

我有这样的数据集,

> data
    ID    AccessTime   ReferrerCode
    101   01:17:40     910
    103   01:27:53     135
    103   01:33:12     222
    202   02:04:11     921
    202   03:40:30     106 
    103   03:45:02     734

我想像这样转换我的数据集,

> data
ID   ReferrerCode
101   910
103   135 222
202   921
202   106
103   734

我的条件是如果数据有相同的ID和相同的AccessTime小时,ReferrerCode将被合并。我应该怎么做才能实现它?

这是一个 base R 解决方案,其中 aggregate()sub()AccessTime.

中提取小时
aggregate(ReferrerCode ~ ID + sub(':.*$', '', AccessTime), c, data=data)[,-2]
#   ID ReferrerCode
#1 101          910
#2 103     135, 222
#3 202          921
#4 103          734
#5 202          106

如果您想在 ReferrerCode 中获得 character 的结果,请使用:

aggregate(ReferrerCode ~ ID + hour(AccessTime), data, FUN=function(x) paste(x, collapse=" "))[,c(1,3)]
       ID ReferrerCode
1 101          910
2 103      135 222
3 202          921
4 103          734
5 202          106

我假设 AccessTimePOSIXlt 格式。从 character 您可以通过

转换
data$AccessTime <- as.POSIXlt(data$AccessTime, format="%H:%M:%S")