R 如何将行与某些条件组合?

R 如何将行与某些条件组合?,r,merge,conditional-statements,rows,R,Merge,Conditional Statements,Rows,我有这样的数据集 > 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

我有这样的数据集

> 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
我想这样转换我的数据集

> 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和相同的访问时间,则将合并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

这里有一个
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

如果希望在
refererCode
中以
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
我假设
AccessTime
POSIXlt
格式。从
字符中
可以通过

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

data$AccessTime如果您想在
refererCode
中以
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
我假设
AccessTime
POSIXlt
格式。从
字符中
可以通过

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

data$AccessTime您可以提供一些带有dput的示例数据吗?访问时间的格式是什么?我会添加一个列,用于确定小时数,然后用整形器转换数据。您能用dput提供一些示例数据吗?访问时间的格式是什么?我会添加一个列,用于标识小时,然后使用Reforme2强制转换数据