Рассмотрим фрейм данных Data
, созданный здесь:
Data <- data.frame(Location = rep(letters[1:20], each = 10))
Я хочу делать попарные сравнения вручную. Во-первых, я хочу найти все возможные попарные комбинации между уровнями Location
в Data
, поэтому я делаю объект Pairs
таким:
Pairs <-expand.grid(unique(Data$Location),unique(Data$Location))
Теперь я хочу удалить строки из объекта Pairs
, где Pairs$Var1 == Pairs$Var2
, и я хочу удалить строки, которые являются дубликатами предыдущих пар, но в обратном порядке. Другими словами, я хочу удалить строки, где Pairs$Var1 == a
и Pairs$Var2 == a
, Pairs$Var1 == b
и Pairs$Var2 == b
и так далее (т. е. я не хочу сравнивать Locations
сами с собой), и я также не хочу, чтобы одно и то же сравнение выполнялось дважды. , так что если Var1==a
уже сравнивалось (или уже существует ранее в data.frame) с Var2 == b
, то я не хочу сравнивать Var1 == b
с Var2 == a
, поэтому мне нужно удалить одну из этих комбинаций, но не другую (я надеюсь, это имеет смысл). Как я могу это сделать?
Мы можем использовать Pairs[Pairs$Var1 == Pairs$Var2,]
, чтобы увидеть, где Var1 == Var2
, но это не поможет решить вторую проблему.
Pairs[Pairs$Var1 < Pairs$Var2,]
то, что вы хотите? В зависимости от ваших настроек stringsAsFactors вам может понадобитьсяPairs[as.character(Pairs$Var1) < as.character(Pairs$Var2),]
- person Bas   schedule 08.07.2020Pairs[as.character(Pairs$Var1) < as.character(Pairs$Var2),]
делает то, что я хочу, хотя я не совсем понимаю, почему, не могли бы вы уточнить в ответе? Таким образом, я также могу принять ваш ответ. Кроме того, как я могу удалить эти строки изPairs
, не создавая новый объект? Я пробовал такие вещи, как:Pairs <- Pairs[-c(as.character(Pairs$Var1) < as.character(Pairs$Var2)),]
, но у меня ничего не получилось - person Ryan   schedule 08.07.2020