R列表与自身的交集

时间:2017-03-27 22:55:14

标签: r unique intersection

我有一个名为my_list的列表,其中包含商店名称和购买商品的所有客户的ID。我想要的是一个"共享"客户,一些列表看起来像: store1,store2,store1和store2的客户交集。

我写了:

my_list2<-lapply(my_list, function(x) lapply(my_list, function(y) intersect(x[[1]],y[[1]])))

哪个有效。 但我想只有独特的商店组合,这意味着我只想拥有

(store1,store2,shared customers) 

而不是

(store2,store1,shared customers).

我也不想

(store1, store1, shared customers),

这只给我一个从store1购买的所有顾客的清单。

最后,在my_list2中,我想只有那些商店至少有一个共享客户的行,所以没有空的交集。

你可以帮帮我吗?非常感谢

1 个答案:

答案 0 :(得分:1)

如果您遍历列表中的索引,并且只计算x[[i]]y[[j]]的交叉点,而i < j,则不会有重复项。注意它仍然是n选择2 intersect s,因此仍然是O(n ^ 2 *相交)复杂度。 循环索引可能如下所示

my_list <- list(a=1:10,b=5:14)
len <- length(my_list)

lapply(1:(len-1), function(i) 
    lapply((i+1):len, function(j) intersect(my_list[[i]], my_list[[j]])))