我的表格user_aisles
是一个数据框,其中包含按user_id
和user_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]
我该怎么做?
答案 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