我正在尝试计算要在推荐系统中使用的产品和用户之间的差异。
数据位于两行多列的列中,需要转换为用户行和列作为产品。
我尝试从重塑包中投射功能,但没有成功。
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个值。
答案 0 :(得分:1)
创建1列后,选项将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