2016-10-15 2 views
0

ich einen Datenrahmen wie diese mit einer Spalte haben:doppelte Funktion erzeugt einen großen Faktor

col1 
line1 
line1 
line2 

Ich versuche Duplikat zu entfernen mit dieser:

df2 <- df[!duplicated(df), ] 

aber es erzeugt einen großen Faktor statt Entfernen des Duplikats Das Ergebnis der Struktur so etwas wie das ist:

str(df2) 
Factor w/ 7472 levels 
+0

Willkommen bei Stack-Überlauf! Wir bitten, dass für Fragen zur Fehlerbehebung Code beteiligt, die Sie ein reproduzierbares Beispiel liefern. Sie können 'dput()' verwenden, um die Daten freizugeben. –

Antwort

2

Wenn Sie nur eine Spalte haben, müssen Sie drop = FALSE verwenden, um einen Datenrahmen zu kommen:

df2 <- df[!duplicated(df), , drop = FALSE] 

eine weitere Option ist mit der unique Funktion:

df2 <- unique(df) 

das Ergebnis beiden Ansätze ist das gleiche:

> df2 
    col1 
1 line1 
3 line2 
+0

Sie brauchen nicht Tropfen außer wenn es nur 1 Spalte (und wenn es nur 1 Spalte, warum Sie eine data.frame wollen würde?). –

+0

'Tropfen = false' in die Tat wird nur dann benötigt, wenn Sie eine Spalte in dem Datenrahmen haben (das ist der Fall, wie OP beschrieben) – h3rm4n

0
col1 <- c("line1", 
      "line1", 
      "line2") 

df <- data.frame(col1=col1, x=c(1,2,3)) 

df1 <- df[!duplicated(df$col1),] 
df1 
col1 x 
1 line1 1 
3 line2 3 
class(df1) 

[1] "data.frame"

+0

Dies gibt keinen Datenrahmen, das ist das, was OP mein Verständnis will – h3rm4n

+0

@ h3rm4n Es gibt eine data.frame, wenn mehr als 1 Spalte vorhanden ist. Wenn es 1 Spalte sollten Sie keine data.frame verwenden. –

+0

ja, aber OP hat nur eine Spalte – h3rm4n

Verwandte Themen