2016-04-29 5 views
0

I-Datensatz wie diese haben,Wie kombiniere ich eine Zeile mit einer Bedingung?

> 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 

Und ich möchte, dass meine Daten-Set wie dieses

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

Mein Zustand ReferrerCode kombiniert werden wird, zu transformieren, wenn die Daten, die die gleiche ID und die gleiche Stunde hat von AccessTime. Was soll ich tun, damit es geschieht?

+0

Können Sie einige Beispieldaten mit dput? In welchem ​​Format ist die Zugriffszeit? Ich würde eine Spalte hinzufügen, die die Stunde angibt und dann die Daten mit reshape2 umwandelt –

Antwort

0

Wenn Sie das Ergebnis als character in ReferrerCode Gebrauch erhalten möchten diese:

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 

ich davon aus, dass AccessTime in POSIXlt Format ist. Von character können Sie konvertieren durch

2

Hier ist eine base R-Lösung mit aggregate() und sub(), um die Stunde aus AccessTime zu extrahieren.

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 
Verwandte Themen