2016-07-25 14 views
0

So habe ich dieser DatensatzUntereinstellung einen Faktor auf die Menge an Beobachtungen in R

str(pcol) 
'data.frame': 3130486 obs. of 20 variables: 
$ body  : Factor w/ 1623190 levels "","' i need to... '",..: 76837 ... 
$ author : Factor w/ 18164 levels "--Kai--","--sunshine--",..: 11455 6643 8117 832 ... 
$ ups  : int 2 7 1 1 1 1 2 4 2 1 ... 
.... 

einen Tisch zu machen zeigt:

table(pcol$author): 
AuthornameX AuthornameY AuthornameZ ... 
148   87   102 

'table' int [1:18164(1d)] 129 5 152 67 18 25 58 319 44 204 ... 
- attr(*, "dimnames")=List of 1 
..$ : chr [1:18164] "--Kai--" "--sunshine--" "-0---0-" "-73-" ... 

So dass ich jetzt mit nur Autoren einen neuen Datensatz erstellen möchten die mehr als 100 Mal im Datensatz sind.

Ich habe versucht, die folgenden:

x <- subset(pcol, length(pcol$author) > 100) 
'table' int [1:2634(1d)] 129 152 319 204 157 177 198 106 144 437 ... 
attr(*, "dimnames")=List of 1 
..$ : chr [1:2634] "--Kai--" "-0---0-" "-Lolrax-" "-PTM-" ... 

So kann ich die Autoren darauf beschränkt, die Zahlen über 100 haben Aber jetzt habe ich das Problem, wie diese Autoren aus dem ursprünglichen Datensatz subtrahieren.

Ich habe versucht, diese:

> y <- subset(pcol, pcol$authors == x) 

Aber das läßt mich mit einem leeren Datenrahmen mit 0 Beobachtungen.

Also: Wie ändere ich den ursprünglichen Datensatz zu einem neuen, nur mit Autoren, die über 100 Mal erscheinen?

My question is similar to this one, so potentially a duplicate. Obwohl die Frage beantwortet wurde, konnte ich die Lösung dort nicht auf mein Problem übertragen. Deshalb stelle ich meine Frage.

Here is a 10.000 rows sample of my data set

+0

Aggregate und neue Spalte hinzufügen, die die Zählung pro Autor zeigt, dann Teilmenge verwenden, um auf dieser Spalte. Fügen Sie auch [reproduzierbares Beispiel] hinzu (http://stackoverflow.com/questions/5963269). – zx8754

+0

Versuchen Sie 'y <- Teilmenge (pcol, pcol $ autors% in% x)'. – Alex

+1

oder mit 'Bibliothek (dplyr); pcol%>% group_by (author)%>% filter (n()> 100) ' – Sotos

Antwort

2

Mit dem data.table Paket bekommt man

require(data.table) 
setDT(pcol) 

Die Autoren stellen mit mehr als 100 Vorkommen

author_sel <- pcol[, .N, by = .(author)][N > 100] 
pcol[author %in% author_sel$author] 
+0

danke !!! das hat funktioniert! –

1

A konnte Basislösung

sein
subset(pcol, author %in% names(which(table(pcol$author)>100))) 

Vielleicht sollten Sie lernen dplyr betrachten. Die dplyr Lösung ist einfacher zu lesen und schneller auf Ihrem Computer zu laufen.

+0

Ich habe einen Beispieldatensatz hinzugefügt. Ich habe versucht, Ihre Befehlszeilen, aber leider gab es viele Autoren mit weniger als 100 Auftritte. Vielleicht gibt Ihnen der Beispieldatensatz ein besseres Verständnis davon, was ich wissen möchte. –

+0

Hat das Ihr Problem behoben? – shayaa

+0

Ach es tat es nicht. Ich habe den Vorschlag von stefan8888 benutzt. Aber trotzdem, danke für deine Hilfe! –

Verwandte Themen