R 将每个用户id组转换为特征向量
我有一个表R 将每个用户id组转换为特征向量,r,R,我有一个表user\u aisles,它是一个包含user\u id的数据框,按user\u aisles和n分组,这是用户在过道中购买的物品数量 kable( head( summarize(user_aisles, n=n()) , 9) ) 给予 我想将其转换为每个用户id的特征向量。这样的特征向量应该是nrow(aisles)dimensional 因此,每个用户id都会获得相应的特征向量。用户1的特征向量可能(基于数据)如下 1: [0, 8, 12, 5, 0, .., 0] 我
user\u aisles
,它是一个包含user\u id
的数据框,按user\u aisles
和n
分组,这是用户在过道中购买的物品数量
kable( head( summarize(user_aisles, n=n()) , 9) )
给予
我想将其转换为每个用户id的特征向量。这样的特征向量应该是nrow(aisles)
dimensional
因此,每个用户id
都会获得相应的特征向量。用户1的特征向量可能(基于数据)如下
1: [0, 8, 12, 5, 0, .., 0]
我如何才能做到这一点?
组假设您的数据位于名为data
的数据框中,您可以使用tidyr
的完成功能:
groups <- split(df, df$user_id)
lapply(groups, function(x) rep(x$aisle_id, x$n))
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
不,那不是我需要的x$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
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>