1

我正在尝试计算要在推荐系统中使用的产品和用户之间的差异。

数据为两列多行,需要转换为行作为用户和列作为产品。

我尝试了 reshape 包中的 cast 函数,但没有成功。

library(dplyr)
library(reshape2)
library(tidyr)
library(reshape)
data <- tibble("customerId" = c(1,2,3,4,1,1), productId = c(10,11,12,10,11,10))

我想将其转换为这种格式:

   10    11    12 
1   1     1     0     
2   0     1     0
3   0     0     1
4   1     0     0

我现在的主要问题是当我们有重复记录时,它应该只计算一次,所以我们有 0-1 值。

4

1 回答 1

1

在创建一列 1s 后,一个选项是spread“宽”格式

library(tidyverse)
data %>% 
  mutate(n = 1) %>%
  spread(productId, n, fill = 0) %>%
  column_to_rownames('customerId')
#  10 11 12
#1  1  1  0
#2  0  1  0
#3  0  0  1
#4  1  0  0
于 2019-05-28T13:47:01.223 回答