使用Tidyr将行中的两列数据转换为R中的多列

时间:2019-05-28 13:45:59

标签: r dplyr tidyr data-transform

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

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

我尝试从重塑包中投射功能,但没有成功。

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个值。

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