首页 > 解决方案 > R中没有重复对的Catesian产品

问题描述

我有 2 个要为其创建笛卡尔积的数据框。

当我这样做时,正如预期的那样,我会得到匹配对,因为我认为笔记本电脑和收​​音机 = 收音机和笔记本电脑。

 #2 dataframes to produce the cartesian product 
 SaleItems<-data.frame(Appliance=c("Radio", "Laptop", "TV", "Fridge"))
 SaleItems2<-data.frame(Appliance2=c("Radio", "Laptop", "TV", "Fridge"))

 #create cartesian product
 SaleItems3<-merge(SaleItems,SaleItems2)

我想要的是摆脱匹配对,例如收音机和笔记本电脑的组合只出现一次。

有没有人有任何建议来实现这一目标?

标签: r

解决方案


对于通过merge参数传入 NULL的笛卡尔连接:

merge(SaleItems, SaleItems2, by=NULL)

然后要删除等效匹配项和反向重复项,请将其扩展为subset

subset(merge(SaleItems, SaleItems2, by=NULL),
       Appliance <= Appliance2)

如果字段是因素:

subset(merge(SaleItems, SaleItems2, by=NULL),
       as.character(Appliance) <= as.character(Appliance2))

#    Appliance Appliance2
# 1      Radio      Radio
# 2     Laptop      Radio
# 4     Fridge      Radio
# 6     Laptop     Laptop
# 8     Fridge     Laptop
# 9      Radio         TV
# 10    Laptop         TV
# 11        TV         TV
# 12    Fridge         TV
# 16    Fridge     Fridge

推荐阅读