R:一次交易中存在的所有可能的产品对

时间:2014-01-21 18:26:53

标签: r networking analysis social

我有这种结构的数据:

data<-data.frame(TransactionNumber=rep(1:10, each=4), 
                 Product=rep(c("a","b","c","d","e","f","g","c","i","j"), length.out=40))

  TransactionNumber Product
1                  1       a
2                  1       b
3                  1       c
4                  1       d
5                  2       e
6                  2       f
7                  2       g
8                  2       c
9                  3       i
10                 3       j
11                 3       a
12                 3       b
13                 4       c
14                 4       d
15                 4       e
16                 4       f
17                 5       g
18                 5       c
19                 5       i
20                 5       j
21                 6       a
22                 6       b
23                 6       c
24                 6       d
25                 7       e
26                 7       f
27                 7       g
28                 7       c
29                 8       i
30                 8       j
31                 8       a
32                 8       b
33                 9       c
34                 9       d
35                 9       e
36                 9       f
37                10       g
38                10       c
39                10       i
40                10       j

我正在尝试为每个交易编号获取两种产品的所有可能组合  出现在给定的交易中(不重复)。每行都是一个组合。所以对于交易一,我会得到1.a b 2. a c等。我暂时没有成功挣扎。任何简单解决方案的想法?谢谢!

1 个答案:

答案 0 :(得分:2)

require(plyr)
ddply(data, "TransactionNumber", .fun=function(x) {
  t(combn(as.character(x$Product), 2))
})
#    TransactionNumber 1 2
# 1                  1 a b
# 2                  1 a c
# 3                  1 a d
# 4                  1 b c
# 5                  1 b d
# 6                  1 c d
# 7                  2 e f
# 8                  2 e g
# 9                  2 e c
# 10                 2 f g
# 11                 2 f c
# 12                 2 g c
# 13                 3 i j
# ...