【问题标题】:Convert sequences in a data frame to a matrix in R将数据框中的序列转换为 R 中的矩阵
【发布时间】:2026-01-27 22:45:02
【问题描述】:

我的数据代表每个会员的最后两次购买,并按 FROM -> TO 排序

df <- data.frame(member_id = c(1,1,2,2,3,3,4,4,5,5), direction = c('FROM','TO','FROM','TO','FROM','TO','FROM','TO','FROM','TO'),product = c('A','A','A','B','C','D','C','C','A','A'))

我正在尝试构建一个转换矩阵来表示成员如何在产品之间移动。

根据上面的数据,我希望用从 -> 到的事件计数填充矩阵,如下所示:

   A   B   C   D
A  2   1   0   0
B  0   0   0   0
C  0   0   1   1
D  0   0   0   0

如何使用 dplyr 语法实现这一点?

【问题讨论】:

    标签: r matrix dplyr


    【解决方案1】:

    您可以使用几个pivot_wider 语句:

    library(dplyr)
    library(tidyr)
    
    df %>%
      mutate(product = factor(product, unique(product))) %>%
      pivot_wider(names_from = direction, values_from = product) %>%
      count(FROM, TO, .drop = FALSE) %>%
      pivot_wider(names_from = TO, values_from = n)
    
    #  FROM      A     B     C     D
    #  <fct> <int> <int> <int> <int>
    #1 A         2     1     0     0
    #2 B         0     0     0     0
    #3 C         0     0     1     1
    #4 D         0     0     0     0
    

    【讨论】:

    • 非常感谢您的帮助,这非常简洁,而不是我会怎么做。谢谢。