R 在大数据集中查找值的共现

R 在大数据集中查找值的共现,r,sparse-matrix,R,Sparse Matrix,我有一个包含月份、客户ID和门店ID的大型数据集。每个客户、每个地点、每个月都有一条记录,总结他们在该地点的活动 Month Customer ID Store Jan 1 A Jan 4 A Jan 2 A Jan 3 A Feb 7 B Feb 2 B Feb 1 B Feb 12

我有一个包含月份、客户ID和门店ID的大型数据集。每个客户、每个地点、每个月都有一条记录,总结他们在该地点的活动

  Month  Customer ID Store
  Jan       1      A
  Jan       4      A
  Jan       2      A
  Jan       3      A    
  Feb       7      B
  Feb       2      B
  Feb       1      B
  Feb       12     B
  Mar       1      C
  Mar       11     C 
  Mar       3      C
  Mar       12     C
我感兴趣的是创建一个矩阵,显示每个地点与其他地点共享的客户数量。像这样:

      A        B         C
A     4        2         2     
B     2        4         2
C     2        2         4
例如,由于客户在下个月访问了A店,然后又访问了B店,因此他们将被添加到盘点中。我感兴趣的是共享客户的数量,而不是访问量

我在这个线程()中尝试了稀疏矩阵方法,但返回的数字不匹配,原因是我无法理解

任何想法都将不胜感激

更新: 我发布的原始解决方案适用于您的数据。但你的数据有问题 不寻常的财产,没有客户访问过同一商店在两个不同的地方 月。假定会发生这种情况,需要进行修改

我们需要的是一个按客户划分的门店矩阵,如果客户曾经 参观了商店,否则归零。使用的原始解决方案
M=as.matrix(表(Dat$ID\u商店,Dat$Customer))

它给出了每个客户访问该商店的不同月份。具有 不同的数据,这些数字可能不止一个。我们可以使用
M=as.matrix(表(Dat$ID\u存储,Dat$Customer)>0)

如果你看这个矩阵,它会说TRUE和FALSE,但是因为TRUE=1和FALSE=0 那就行了。因此,完全正确的解决方案是:

M = as.matrix(table(Dat$ID_Store, Dat$Customer) > 0)
M %*% t(M)

    A B C
  A 4 2 2
  B 2 4 2
  C 2 2 4
更新: 我发布的原始解决方案适用于您的数据。但你的数据有问题 不寻常的财产,没有客户访问过同一商店在两个不同的地方 月。假定会发生这种情况,需要进行修改

我们需要的是一个按客户划分的门店矩阵,如果客户曾经 参观了商店,否则归零。使用的原始解决方案
M=as.matrix(表(Dat$ID\u商店,Dat$Customer))

它给出了每个客户访问该商店的不同月份。具有 不同的数据,这些数字可能不止一个。我们可以使用
M=as.matrix(表(Dat$ID\u存储,Dat$Customer)>0)

如果你看这个矩阵,它会说TRUE和FALSE,但是因为TRUE=1和FALSE=0 那就行了。因此,完全正确的解决方案是:

M = as.matrix(table(Dat$ID_Store, Dat$Customer) > 0)
M %*% t(M)

    A B C
  A 4 2 2
  B 2 4 2
  C 2 2 4
我们也可以试试这个:

library(reshape2)
df <- dcast(df,CustomerID~Store, length, value.var='Store')
#  CustomerID A B C
#1          1 1 1 1 
#2          2 1 1 0 # Customer 2 went to stores A,B but not to C
#3          3 1 0 1
#4          4 1 0 0
#5          7 0 1 0
#6         11 0 0 1
#7         12 0 1 1
crossprod(as.matrix(df[-1]))
#  A B C
#A 4 2 2
#B 2 4 2
#C 2 2 4

我们也可以试试这个:

library(reshape2)
df <- dcast(df,CustomerID~Store, length, value.var='Store')
#  CustomerID A B C
#1          1 1 1 1 
#2          2 1 1 0 # Customer 2 went to stores A,B but not to C
#3          3 1 0 1
#4          4 1 0 0
#5          7 0 1 0
#6         11 0 0 1
#7         12 0 1 1
crossprod(as.matrix(df[-1]))
#  A B C
#A 4 2 2
#B 2 4 2
#C 2 2 4


嗨,桑迪潘。阿鲁莱斯图书馆是否也可用于计算这些客户在其他地点的活动。例如,如果我有一个“购买的沐浴产品数量”栏和另一个“户外产品数量”栏,我可以对我们最初创建的矩阵中发生的活动求和吗?也就是说,如果属于A店的顾客去了B店,我们能总结一下他们在那里的活动吗?嗨,桑迪潘。阿鲁莱斯图书馆是否也可用于计算这些客户在其他地点的活动。例如,如果我有一个“购买的沐浴产品数量”栏和另一个“户外产品数量”栏,我可以对我们最初创建的矩阵中发生的活动求和吗?也就是说,如果属于A店的客户去了B店,我们可以总结一下他们在那里的活动吗?