将每个user_id组转换为特征向量

时间:2017-06-04 18:15:57

标签: r

我的表格user_aisles是一个数据框,其中包含按user_iduser_aisles分组的n,这是用户在过道中购买的商品数量

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

给出

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

我想将其转换为每个用户ID的要素向量。这样的特征向量应该是nrow(aisles)维。

因此每个user_id都会获得相应的特征向量。用户1的特征向量可以(基于数据)看起来像

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

我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

您可以使用split对用户进行分组,然后使用rep功能展开过道ID。

答案 1 :(得分:0)

假设您的数据位于名为data的数据框中,您可以使用tidyr的{​​{1}}功能:

complete

我假设根据您数据中的最大值,有21个可能的过道ID。

如果您想为每位消费者添加一行,您可以使用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

spread