【问题标题】:Transform each user_id group to a feature vector将每个 user_id 组转换为特征向量
【发布时间】:2017-06-04 18:15:56
【问题描述】:

我有一个表user_aisles,它是一个包含user_id 的数据框,按user_aislesn 分组,这是用户在过道中购买的物品数量。

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]

我该怎么做?

【问题讨论】:

    标签: r


    【解决方案1】:
    groups <- split(df, df$user_id)
    lapply(groups, function(x) rep(x$aisle_id, x$n))
    

    您可以使用split 对您的用户进行分组,然后使用rep 函数来扩展通道ID。

    【讨论】:

    • 嗯。不,那不是我需要的。 x$aisle_id 应该是每个特征向量中的 index。我不知道你为什么只是重复这个值?
    【解决方案2】:

    假设您的数据位于名为 data 的数据框中,您可以使用 tidyrcomplete 函数:

    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
    

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

    如果您想为每个消费者设置一行,您可以使用spread

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      相关资源
      最近更新 更多