创建包含R中一列中的所有值对的表,计算唯一值 [英] Create table with all pairs of values from one column in R, counting unique values

查看:8
本文介绍了创建包含R中一列中的所有值对的表,计算唯一值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有显示哪些客户购买了某些商品的数据。他们可以多次购买一件物品。我需要的是一个表格,它显示了所有可能的商品配对组合,以及购买了该组合的唯一客户数量(表格的对角线将是购买每件商品的唯一人数)。

举个例子:

item <- c("h","h","h","j","j")
customer <- c("a","a","b","b","b")
test.data <- data.frame(item,customer)

以下是测试。data:

item customer
h    a
h    a
h    b
j    b
j    b

Result Need-一个以行和列名表示商品的表,表中包含购买该商品对的唯一客户的计数。因此,2个客户购买了项目h,1个客户同时购买了项目h和j,1个客户购买了项目j。

item   h    j
h      2    1
j      1    1

我已经尝试使用表函数melt/cast等,但都无法获得表中所需的计数。我的第一步是使用unique()删除重复行。

推荐答案

使用data.tablegtools包,我们可以按客户重新创建所有可能的排列:

library(data.table)
library(gtools)

item <- c("h","h","h","j","j")
customer <- c("a","a","b","b","b")
test.data <- data.table(item,customer)

DT <- unique(test.data) #The unique is used as multiple purchases do not count twice

tuples <- function(x){
  return(data.frame(permutations(length(x), 2, x, repeats.allowed = T, set = F), stringsAsFactors = F))
}

DO <- DT[, tuples(item), by = customer]

这将提供:

   customer X1 X2
1:        a  h  h
2:        b  h  h
3:        b  h  j
4:        b  j  h
5:        b  j  j

这是客户拥有的所有唯一项目配对的列表。根据您的示例,我们对待h x j的方式与对待j x h的方式不同。现在可以使用表函数获得每对的频率:

table(DO$X1,DO$X2)
    j h
  j 1 1
  h 1 2

这篇关于创建包含R中一列中的所有值对的表,计算唯一值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆