2016-09-22 4 views
1

Ich möchte Zeilen aus einem Datenrahmen ausschließen, die gespiegelte Informationen enthalten. Das ist mein Eingang:Redundante Zeilen mit verschiedenen Strings ausschließen

dfin <- 'info 
     c1-10-20-c2-40-50 
     c2-1-2-c4-20-25 
     c4-20-25-c2-1-2 
     c2-40-50-c1-10-20' 
dfin <- read.table(text=dfin, header=T) 

Im obigen Beispiel können Sie sehen, dass die Zeilen 1 und 3; 2 und 4 repräsentieren die gleiche Logik in einem "Spiegel". In meinem Kontext spielt es keine Rolle, ob ich c1-10-20-c2-40-50 oder c2-40-50-c1-10-20 habe, also würde ich gerne eine dieser Zeilen herausfiltern (irgendwelche von ihnen). Ich habe nicht mehr als zwei redundante Zeilen. Darüber hinaus sind diese "gespiegelten" Zeilen in meinem tatsächlichen Datensatz verstreut und folgen keinem Muster. Meine erwartete Ausgabe:

dfout <- 'info 
     c1-10-20-c2-40-50 
     c2-1-2-c4-20-25' 
dfout <- read.table(text=dfout, header=T) 

Antwort

1

Wir können teilen die ‚info‘ Spalte von -, sort es, konvertieren zu einem logischen Vektor mit duplicated, die für subsetting der Zeilen verwendet werden.

dfN <- dfin[!duplicated(lapply(strsplit(as.character(dfin$info), "-"), sort)),, drop=FALSE] 
all.equal(dfN, dfout, check.attributes=FALSE) 
#[1] TRUE 
1

Hier ist ein Ansatz, der nicht die ursprüngliche Reihenfolge nicht halten:

dfin <- 'info-info-info-info-info-info 
     c1-10-20-c2-40-50 
c2-1-2-c4-20-25 
c4-20-25-c2-1-2 
c2-40-50-c1-10-20' 
df <- read.table(text=dfin, header=T, sep = "-", strip.white = T) 
dfout<-as.data.frame(unique(t(apply(df, 1, sort)))) 

ich Ihre Spaltennamen es Arbeit zu bilden verlängert.

Verwandte Themen