我有一个名为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中,我想只有那些商店至少有一个共享客户的行,所以没有空的交集。
你可以帮帮我吗?非常感谢答案 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]])))