2016-05-11 12 views
1

Ich habe die folgende Tabelle und ich würde gerne die Anzahl der einzigartigen Sitzungen unter der Annahme, dass: wenn der gleiche Besucher (Browser) hat zwei siquenzielle Zeitstempel mit mehr als 30 min Unterschied, dann sollten diese sein als zwei einzigartige Sitzungen betrachtet.berechnen einmalige Sitzung pro Besucher in R

Browser ist eindeutig jeden Benutzer Zeitstempel identifiziert ist Datum mit der Zeit Seite ist url Seite

Browsers timestamp    Page 
    x  2014-01-01 14:15:33  1 
    x  2014-01-01 14:16:33  2 
    x  2014-01-01 14:17:33  3 
    x  2014-01-01 16:15:33  1 
    y  2014-01-01 16:20:33  5 
    y  2014-01-01 16:25:33  2 

So auf der Grundlage der gegebenen Logik und der obigen Tabelle I Dummy 3 einzigartige Sitzungen bekommen sollte. 2 für Browser x und 1 für Browser y

Ich bin ziemlich neu mit R, also habe ich keine Ahnung, wie man überhaupt anfängt. Jede Hilfe oder Anregung, etwas relevantes zu lesen, wird sehr geschätzt.

+0

Was wollen Sie mit Läufen zu tun? Z. B., wenn Browser 'z' Zeitstempel von 8:00, 8:20 und 8:40 hat, ist diese 1 Sitzung? – Gregor

+0

Genau! In meinem Datensatz. Jede Zeile in meinem Datensatz stellt einen Besuch auf einer Seite meiner Website dar. Spaltenbrowser repräsentieren die ID des Benutzers. Jeder Benutzer kann entweder 1 Seite besuchen und auf weitere Seiten klicken. Wenn für den gleichen Besucher der sequentielle Zeitstempel größer als 30 Minuten ist, sollten diese zwei als zwei verschiedene Besuche identifiziert werden. – kostas

+0

Ist Ihre Zeitstempelspalte bereits eine nützliche POSIX-Klasse oder ist sie ein Zeichen oder ein Faktor? – Gregor

Antwort

4

Eine Lösung mit data.table:

setDT(df)[order(timestamp), .(uniSession = sum(diff(timestamp) > 30) + 1), .(Browsers)] 
    Browsers uniSession 
1:  x   2 
2:  y   1 
+0

Es funktioniert, aber ich brauche nicht die Summe pro Browser (Entschuldigung, wenn ich irreführend in meinem Versuch, um sicherzustellen, dass die Logik verstanden wird), wie ich Tausende von ihnen habe und es nicht nützlich ist. Stattdessen möchte ich einen aggregierten Wert, entweder total oder idealerweise gruppiert durch eine andere Spalte, sagen wir um der Plattform des Arguments willen. – kostas

+0

Gibt es trotzdem die Summe für den gesamten Datensatz unter Beibehaltung der Logik (effektiv die Summe des Ergebnisses Ihres Skripts) – kostas

+0

Sie können eine weitere Zusammenfassung Sitzung nach hinzufügen. dh 'setDT (df) [Reihenfolge (Zeitstempel),. (uniSession = Summe (diff (Zeitstempel)> 30) + 1),. (Browser)] [,. (sumUniSessions = Summe (uniSession))]', wird dies Geben Sie 'sumUniSessions' als 3. – Psidom

0

Mit dplyr

library(dplyr) 
df %>% 
    group_by(Browsers) %>% 
    arrange(timestamp) %>% 
    summarise(uniSession = sum(diff(timestamp) > 30) + 1)