Doppelte Spaltenpaare entfernen, Zeilen nach 2 Spalten sortieren




(2)

Anstatt für den gesamten Datensatz zu sortieren, sortieren Sie 'Var1', 'Var2' und entfernen Sie dann die doppelten Zeilen mit duplicated

testdata[1:2] <- t( apply(testdata[1:2], 1, sort) )
testdata[!duplicated(testdata[1:2]),]
#   Var1 Var2       f       g
#1    1    4    blue    blue
#2    2    3   green   green
#5    5    5 orange2 orange1

Diese Frage hat hier bereits eine Antwort:

Im folgenden Datenrahmen möchte ich Zeilen nur einmal behalten, wenn sie doppelte Paare (1 4 und 4 1 werden als dasselbe Paar betrachtet) von Var1 und Var2 . Ich dachte daran, Var1 und Var2 innerhalb der Zeile zu sortieren und dann doppelte Zeilen basierend auf Var1 und Var2 entfernen. Ich komme jedoch nicht zu meinem gewünschten Ergebnis.

So sehen meine Daten aus:

Var1 <- c(1,2,3,4,5,5)
Var2 <- c(4,3,2,1,5,5)
f <- c("blue","green","yellow","red","orange2","grey")
g <- c("blue","green","yellow","red","orange1","grey")
testdata <- data.frame(Var1,Var2,f,g)

Ich kann innerhalb der Zeilen sortieren, aber die Werte der Spalten f und g sollten unberührt bleiben. Wie mache ich das?

testdata <- t(apply(testdata, 1, function(x) x[order(x)]))
testdata <- as.data.table(testdata)

Dann möchte ich doppelte Zeilen basierend auf Var1 und Var2 entfernen

Ich möchte dies als Ergebnis erhalten:

Var1 Var2 f       g
1    4    blue    blue
2    3    green   green
5    5    orange2 orange1

Danke für Ihre Hilfe!


Falls Leute daran interessiert sind, dies mit dplyr zu lösen:

library(dplyr)
testdata %>% 
   rowwise() %>%
   mutate(key = paste(sort(c(Var1, Var2)), collapse="")) %>%
   distinct(key, .keep_all=T) %>%
   select(-key)

# Source: local data frame [3 x 4]
# Groups: <by row>
# 
# # A tibble: 3 × 4
#    Var1  Var2       f       g
#   <dbl> <dbl>  <fctr>  <fctr>
# 1     1     4    blue    blue
# 2     2     3   green   green
# 3     5     5 orange2 orange1



r  

r