2016-07-15 8 views
2

verschmelzenden ich eine Datenbank haben, die wie folgt aussieht:reorganisieren Datenbank von Zeilen aus einer variablen

userId   SessionId  Screen   Platform  Version 
01    1    first   IOS   1.0.1 
01    1    main   IOS   1.0.1 
01    2    first   IOS   1.0.1 
01    3    first   IOS   1.0.1 
01    3    main   IOS   1.0.1 
01    3    detail   IOS   1.0.1 
02    1    first   Android  1.0.2 

Im Grunde, was ich beabsichtige, zu bestimmen, zu tun, wenn ein „Pfad“ (verschiedene Bildschirme) zu einem führt bessere Retention oder nicht. Ich möchte jede Session ID in einer Spalte neu organisieren. Ideal Datenbank würde wie folgt aussehen:

userId  SessionId  Path     Retention 
01   1    first;main   3 
01   2    first    3 
01   3    first;main;detail 3 
02   1    first    1 

Hier ist die Variable Retention auf die maximale SessionId gleich sein würde.

Antwort

1

Eine mögliche Lösung in Basis R:

d2 <- aggregate(Screen ~ userId + SessionId, d, toString) 
transform(d2, retention = ave(Screen, userId, FUN = length)) 

das ergibt:

:

> d2 
    userId SessionId    Screen retention 
1  01   1   first, main   3 
2  02   1    first   1 
3  01   2    first   3 
4  01   3 first, main, detail   3 

Eine alternative Verwendung

das ergibt:

userId SessionId    Screen retention 
    <chr>  <int>    <chr>  <int> 
1  01   1   first, main   3 
2  01   2    first   3 
3  01   3 first, main, detail   3 
4  02   1    first   1 
0

Ich habe eine Lösung data.table

library(data.table) 
dt <- as.data.table(d) 
dt[, Retention := max(SessionId), by = .(userId)] 
dt[, .(Screen = paste(Screen, collapse = ";"), Retention = unique(Retention)), by = .(userId, SessionId)] 

userId SessionId   Screen Retention 
1:  01   1  first;main   3 
2:  01   2    first   3 
3:  01   3 first;main;detail   3 
4:  02   1    first   1 
+0

eine sauberere Alternative (mindestens IMO): 'dt [Retentions [(Screen = toString (Screen)), by = (UserID SessionId)..]: = .N, by = userId] [] ' – Jaap

+0

Ich nahm an, dass die Semikolons wichtig waren und dass sessionIds fehlen könnten. –

Verwandte Themen