r - 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)
我想要的是摆脱匹配对,例如收音机和笔记本电脑的组合只出现一次。
有没有人有任何建议来实现这一目标?
解决方案
对于通过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
推荐阅读
- php - 使用 php 的表单中的 URL
- python - 无法在 if 语句中获取 plot.ion() 以评估模型的进度
- c# - 从派生类创建只读泛型列表
- bash - 如何将带有引号的可变数量的命令行参数解析为eval?
- sql - 从 Teradata 中的大表中更快地检索结果
- vba - 使用替换字符串批量重命名 Outlook 文件夹
- java - 如何在 RecyclerView 上维护从相机拍摄的照片
- azure - 已到达 Azure 端点,但对 API 的调用返回 404 错误
- angular - IndexedDB NotFoundError
- c++ - 使用 g++ 在 AIX 上编译 pthread.h 的东西