R 如何查找组内同时出现的成对值(A和B)的频率

R 如何查找组内同时出现的成对值(A和B)的频率,r,R,我有一个数据集,包括:客户、食品供应商和订单日期 客户可以在同一天内从多家食品供应商订购。我需要计算同一天内从同一客户订购的供应商组(A&B;A&C、B&C等)的频率和百分比 数据集: df <- read.table(header=TRUE, text="Name       Vendor       Order_date Bob          A         1-1-2020 Bob          A          1-

我有一个数据集,包括:客户、食品供应商和订单日期

客户可以在同一天内从多家食品供应商订购。我需要计算同一天内从同一客户订购的供应商组(A&B;A&C、B&C等)的频率和百分比

数据集:

df <- read.table(header=TRUE, 
  text="Name       Vendor       Order_date
       Bob           A          1-1-2020
       Bob           A          1-1-2020
       Bob           B          1-1-2020
       Joe           A          1-2-2020
       Joe           B          1-2-2020
       Chris         A          1-1-2020
       Chris         B          1-2-2020
       David         C          1-3-2020
       David         A          1-3-2020
       David         B          1-3-2020
") 


df这里有一个仅使用基本
R
函数的潜在解决方案。该战略是:

  • 按日分割
  • 找到每天从中购买物品的独特供应商
  • 在天内找到这些供应商的所有2个组合
  • 使用
    unlist
  • 使用
    表格进行计数
  • 我定义了一个名为
    combinations
    的函数,以使事情更干净

    dat = read.table(header=TRUE, text="
    Name       Vendor       Order_date
    Bob           A          1-1-2020
    Bob           A          1-1-2020
    Bob           B          1-1-2020
    Joe           A          1-2-2020
    Joe           B          1-2-2020
    Chris         A          1-1-2020
    Chris         B          1-2-2020
    David         C          1-3-2020
    David         A          1-3-2020
    David         B          1-3-2020")
    
    combinations = function(x) {
      out <- combn(unique(x$Vendor), 2)
      apply(out, 2, function(i) paste(sort(i), collapse='+'))
    }
    dat = split(dat, dat$Order_date)
    table(unlist(sapply(dat, combinations)))
    #> 
    #> A+B A+C B+C 
    #>   3   1   1
    
    dat=read.table(header=TRUE,text=
    供应商名称订单日期
    鲍勃A 1-1-2020
    鲍勃A 1-1-2020
    鲍勃B 1-1-2020
    乔A 1-2-2020
    乔B 1-2-2020
    克里斯A 1-1-2020
    克里斯B 1-2-2020
    大卫C 1-3-2020
    大卫A 1-3-2020
    大卫B 1-3-2020)
    组合=功能(x){
    出来
    #>A+B A+C B+C
    #>   3   1   1