r - 从数据框中的产品列表创建配对组合

标签 r dataframe dplyr combinations

我得到了他们在特定时间段内使用的用户和产品的数据:

dframe <- data.frame(id = c(1234,1234, rep(3456, 4)), 
                     product = c("Apple", "Pear", "Apple", "Pear", "Grapes", "Kiwi"))

  id product
1234   Apple
1234    Pear
3456   Apple
3456    Pear
3456  Grapes
3456    Kiwi

我正在寻找一种方法来为每位用户创建独特的产品对组合(其中 x-y 对等于 y-x 对)。解决方案如下所示:

solution
  id product1 product2
1234    Apple     Pear
3456    Apple     Pear
3456    Apple   Grapes
3456    Apple     Kiwi
3456     Pear   Grapes
3456     Pear     Kiwi
3456   Grapes     Kiwi

本质上,如果有意义的话,我想在 dplyr 的 group_by(id) 之后应用 combn(product,2) 的等价物。有什么想法可以解决这个问题吗?

非常感谢您的帮助!

最佳答案

这是一个使用 data.table 中的 CJ 的选项

library(data.table)
setDT(dframe)[, product := as.character(product)
     ][, CJ(product1= product, product2 = product, unique = TRUE), 
  by = id][product1 != product2
  ][!duplicated(data.table(id, pmin(product1, product2), pmax(product1, product2)))]

关于r - 从数据框中的产品列表创建配对组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44136332/

相关文章:

前导行中的引用数据

r - R 中的 Julia(JuliaCall 和 XRJulia 不适用于 Julia 0.7 或更高版本)

r - 计算上面所有行的唯一值的数量

r - 数据框中的 Colmeans 按因子变量

python - 按条件分组并计算子组的总和

r - 每个数据组合的特殊组编号

`nls` 中的 R 表达式适合吗?

r - 如何计算使用 R 中的 CARET 训练的模型的 95% 置信区间?

python - 如何在时间序列中的每一天的开始和结束时获取值

r - 当列中的值在 R 中具有非连续数字时填充行