2016-09-30 3 views
1

Ich habe 2 Variablen in einem Datenrahmen mit 300 Beobachtungen.Entfernen von Duplikaten in R ohne Konvertierung in numerische

$ imagelike: int 3 27 4 5370 ... 
$ user: Factor w/ 24915 levels "\"0.1gr\"","\"008bla\"", .. 

Ich habe dann versucht, die Duplikate zu entfernen, wie "- " 2 mal erscheint:

testclean <- data1[!duplicated(data1), ] 

Das gibt mir die Warnmeldung:

In Ops.factor(left): "-"not meaningful for factors 

Ich habe es ein dann umgewandelt maxtrix:

data2 <- data.matrix(data1) 
testclean2 <- data2[!duplicated(data2), ] 

Dies macht den Trick - jedoch - es konvertiert die userNames in eine numerische.

============================================== ======================== Ich bin neu, aber ich habe versucht, vorherige Beiträge zu diesem Thema (einschließlich der eine unten), aber es hat nicht funktioniert:

Convert data.frame columns from factors to characters

+0

Das sieht wie ein Problem aus, das beim Einlesen der Daten besser gelöst werden kann. Können Sie einige der Rohdaten? – user20650

+0

Entschuldigung, ich habe ein Wort in meinem Kommentar oben verpasst;). Sollten Sie lesen * Können Sie ** einige der Rohdaten teilen? * (Sagen Sie die ersten zehn Zeilen/fünf Spalten). Können Sie auch zeigen, wie Sie die Daten eingelesen haben?Prost – user20650

+0

Ich schlage vor, Sie verbessern Ihre Frage durch Lesen über [wie Fragen zu stellen] (http://stackoverflow.com/help/mcve) und über [reproduzierbare Fragen] (http://stackoverflow.com/questions/5963269/how -zu-groß-r-reproduzierbar-Beispiel machen. Sie erhalten erheblich mehr Ansichten (und möglicherweise Antworten), wenn Ihre Frage so strukturiert ist, dass wir Ihnen helfen können. – r2evans

Antwort

-1

data$userName <- as.character(data$userName)

versuchen und dann data<-unique(data)

Sie könnten beim Lesen der Daten auch das Argument stringAsFactor = FALSE übergeben. Dies ist normalerweise eine gute Idee.

+0

Von einem Blick auf ihren Screenshot, und "Str", ist es unwahrscheinlich, dass dies so einfach sein. Zum Beispiel, 'dat <- data.frame (x = 1: 3, y = c (" Wort "," "Wort" "," und "")); as.zeichen (dat $ y); length (unique (as.character (dat $ y))) ' – user20650

+0

Dies könnte wahrscheinlich adressiert werden, indem gsub '' '' mit leerem Leerzeichen ersetzt. Etwas wie 'gsub ('' ',' ', data $ userName)' –

+0

Und das sollte wahrscheinlich Ihre Antwort gewesen sein, anstatt was Sie gepostet haben. –

1

Einige Beispieldaten aus dem Bild (bitte nicht Bilder von Daten!):

data1$userName <- gsub('"', '', as.character(data1$userName)) 
str(data1) 
# 'data.frame': 6 obs. of 2 variables: 
# $ imageLikeCount: num 3 27 4 4 16 103 
# $ userName  : chr "testblabla" "test_00" "frenchfries" "frenchfries" ... 
:

data1 <- data.frame(imageLikeCount = c(3,27,4,4,16,103), 
        userName = c("\"testblabla\"", "test_00", "frenchfries", "frenchfries", "test.inc", "\"parmezan_pizza\"")) 
str(data1) 
# 'data.frame': 6 obs. of 2 variables: 
# $ imageLikeCount: num 3 27 4 4 16 103 
# $ userName  : Factor w/ 5 levels "\"parmezan_pizza\"",..: 2 5 3 3 4 1 

das Problem mit Faktoren sowie die eingebetteten Anführungszeichen zu beheben

Wie @DanielWinkler vorgeschlagen, wenn Sie ändern können, wie die Daten eingelesen oder definiert werden, könnten Sie wählen, stringsAsFactors = FALSE einzuschließen (dieses Argument wird in vielen Funktionen einschließlich read.csv, read.table, a akzeptiert nd die meisten data.frame Funktionen einschließlich as.data.frame und rbind):

data1 <- data.frame(imageLikeCount = c(3,27,4,4,16,103), 
        userName = c("\"testblabla\"", "test_00", "frenchfries", "frenchfries", "test.inc", "\"parmezan_pizza\""), 
        stringsAsFactors = FALSE) 
str(data1) 
# 'data.frame': 6 obs. of 2 variables: 
# $ imageLikeCount: num 3 27 4 4 16 103 
# $ userName  : chr "\"testblabla\"" "test_00" "frenchfries" "frenchfries" ... 

(Beachten Sie, dass dies immer noch Anführungszeichen eingebettet ist, so dass Sie immer noch so etwas wie data1$userName <- gsub('"', '', data1$userName) benötigen)

Jetzt haben wir Daten haben, die wie folgt aussieht. :

data1 
# imageLikeCount  userName 
# 1    3  testblabla 
# 2    27  test_00 
# 3    4 frenchfries 
# 4    4 frenchfries 
# 5    16  test.inc 
# 6   103 parmezan_pizza 

und Ihre Notwendigkeit Duplikate entfernen funktioniert:

data1[! duplicated(data1), ] 
# imageLikeCount  userName 
# 1    3  testblabla 
# 2    27  test_00 
# 3    4 frenchfries 
# 5    16  test.inc 
# 6   103 parmezan_pizza 
+0

Wenn dies Ihre Frage erfüllt, können Sie es akzeptieren (Häkchen auf der linken Seite der Antwort) und betrachten Sie eine Up-Stimme? Stack Exchange Etikette leitet Schließen einer Frage mit der besten Antwort (kann in der Zukunft geändert werden Wenn Sie eine oder mehrere Antworten besonders gut finden, können Sie sie "up-votieren". Beide Aktionen geben den Plakaten Dankbarkeit, Anerkennung und messbare Reputationspunkte. – r2evans

Verwandte Themen