2017-06-04 4 views
0

I eine Tabelle habe user_aisles zu einem Merkmalsvektor, der ein Datenrahmen, der die Anzahl der Elemente von einem Benutzer in einem Gang ist, haben von user_aisles und n gruppiert enthält user_id ist.Trans jede Gruppe User_id

kable(head(summarize(user_aisles, n=n()) , 9)) 

gibt

| user_id| aisle_id| n| 
|-------:|--------:|--:| 
|  1|  2| 8| 
|  1|  3| 12| 
|  1|  4| 5| 
|  2|  1| 1| 
|  2|  3| 6| 
|  2|  14| 1| 
|  2|  17| 2| 
|  2|  20| 1| 
|  2|  21| 5| 

Ich möchte diese Vektoren in Funktion für jeder Benutzer-ID zu transformieren. Ein solcher Merkmalsvektor sollte nrow(aisles) dimensional sein.

So bekommt jeder user_id einen entsprechenden Merkmalsvektor. Merkmalsvektor für Benutzer 1 könnte (basierend auf den Daten) wie folgt aussehen:

1: [0, 8, 12, 5, 0, .., 0] 

Wie kann ich das tun?

Antwort

0
groups <- split(df, df$user_id) 
lapply(groups, function(x) rep(x$aisle_id, x$n)) 

können Sie split gruppieren Ihre Benutzer verwenden und dann die rep Funktion, um die Gang-IDs zu erweitern.

+0

Hm. Nein, das ist nicht was ich brauche. 'x $ aisle_id' soll der _index_ in jedem Merkmalsvektor sein. Ich bin mir nicht sicher, warum Sie nur den Wert wiederholen? – displayname

0

Vorausgesetzt, dass Sie Ihre Daten in einem Datenrahmen namens data können Sie verwenden tidyr ‚s complete Funktion:

library(tidyverse)  
data %>% complete(user_id, aisle_id = 1:21, fill = list(n = 0)) 

# A tibble: 42 × 3 
    user_id aisle_id  n 
    <dbl> <dbl> <dbl> 
1  1  1  0 
2  1  2  8 
3  1  3 12 
4  1  4  5 
5  1  5  0 
6  1  6  0 
7  1  7  0 
8  1  8  0 
9  1  9  0 
10  1  10  0 
# ... with 32 more rows 

Hier gehe ich davon gibt es 21 mögliche Gang-IDs basierend auf dem größten Wert in Ihren Daten.

Wenn Sie eine Zeile für jeden Verbraucher möchten, können Sie spread verwenden:

data %>% 
complete(user_id, aisle_id = 1:21, fill = list(n = 0)) %>% 
mutate(aisle_id = paste0("aisle_", formatC(aisle_id, width = 2, flag = 0))) %>% spread(aisle_id, n) 

    # A tibble: 2 × 22 
    user_id aisle_01 aisle_02 aisle_03 aisle_04 aisle_05 aisle_06 aisle_07 aisle_08 aisle_09 aisle_10 aisle_11 aisle_12 
* <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
1  1  0  8  12  5  0  0  0  0  0  0  0  0 
2  2  1  0  6  0  0  0  0  0  0  0  0  0 
# ... with 9 more variables: aisle_13 <dbl>, aisle_14 <dbl>, aisle_15 <dbl>, aisle_16 <dbl>, aisle_17 <dbl>, aisle_18 <dbl>, 
# aisle_19 <dbl>, aisle_20 <dbl>, aisle_21 <dbl>