【发布时间】:2020-07-08 13:15:05
【问题描述】:
考虑这里创建的数据框Data:
Data <- data.frame(Location = rep(letters[1:20], each = 10))
我想手动进行成对比较。首先,我想在Data 中找到Location 级别之间所有可能的成对组合,所以我将对象Pairs 设为这样:
Pairs <-expand.grid(unique(Data$Location),unique(Data$Location))
现在我想从Pairs$Var1 == Pairs$Var2 的对象Pairs 中删除行,并且我想删除与先前对“重复”的行,但顺序相反。
换句话说,我想删除Pairs$Var1 == a & Pairs$Var2 == a、Pairs$Var1 == b & Pairs$Var2 == b 等的行(即,我不想将Locations 与自己进行比较),我也不想'不希望进行两次相同的比较,所以如果 Var1==a 已经被比较(或已经存在于 data.frame 中的较早部分)到 Var2 == b,那么我不想比较 Var1 == b 到 @987654337 @,所以我需要删除其中一个组合,而不是另一个(我希望这是有道理的)。
我该怎么做?
我们可以使用Pairs[Pairs$Var1 == Pairs$Var2,]查看Var1 == Var2在哪里,但这对第二个问题没有帮助
【问题讨论】:
-
Pairs[Pairs$Var1 < Pairs$Var2,]做你想做的事吗?根据您的 stringsAsFactors 设置,您可能需要Pairs[as.character(Pairs$Var1) < as.character(Pairs$Var2),] -
@Bas
Pairs[as.character(Pairs$Var1) < as.character(Pairs$Var2),]做我想做的事,虽然我不太明白为什么,你愿意在回复中详细说明吗?这样我也可以接受你的回答。另外,如何在不创建新对象的情况下从Pairs中删除这些行?我一直在尝试类似:Pairs <- Pairs[-c(as.character(Pairs$Var1) < as.character(Pairs$Var2)),]但没有任何工作