2016-04-13 2 views
0

ich einen Datenrahmen in R haben (nennen wir es „Animals“) mit dem Namen Spalten nach Tieren wie Kaninchen, Katze, etc. Es sieht wie folgt aus:Untereinstellung einen Datenrahmen in R von Bedingungen für jede Spalte eine Variable mit

| Rabbit | Cat | Frog | Cow | Dog | 
|--------|-----|------|-----|-----| 
| 0  | 1 | 1 | 0 | 1 | 
| 0  | 0 | 3 | 1 | 4 | 
| 2  | 1 | 0 | 0 | 0 | 

Es gibt Hunderte von Zeilen in der Liste, und es gibt auch mehr Tiere (Spalten).

möchte ich Teilmengen dieser Datenrahmen für jedes Tier nehmen, wo ihre Zahl größer als 0 ist zum Beispiel, ich möchte eine subsetted Kaninchen Datenrahmen von nur die Zeilen in Tiere, wo Kaninchen> 0

Zuerst habe ich versucht,

species <- "Rabbit" 

Dann habe ich versucht, die Tiere Datenrahmen der Teilmenge von dplyr des Filters mit(): eine Variable "Spezies" zu schaffen

Rabbits <- filter(Animals, species >= 1) 

das ist nicht wor k, weil filter() versucht hat, nach einer Kolumne namens "species" und nicht nach "Rabbit" zu suchen.

Ich habe die Variable "Spezies" erstellt, weil ich hoffe, den Prozess zu automatisieren, indem ich einen Vektor aller meiner Tiernamen durchlaufen und sie in entsprechende Datenrahmen unterteilen kann.

Gibt es einen effizienteren Ansatz dafür?

Ich bin sehr neu zu R so alle ELI5 Erklärungen würden geschätzt werden. Vielen Dank!

Antwort

1

Sie können auf eine Spalte mit dem Namen unter Verwendung der []-Syntax zugreifen.

toKeep <- Alimals[species] >= 1 

und dann

Rabbit <- Animals[toKeep,] 
+0

Danke für die schnelle Antwort !! Das ist nah dran, was ich will, aber das Problem ist, ich möchte eine Variable anstelle von Rabbit in Rabbit> = 1 verwenden. I.e. Ich will Arten> = 1, wo Arten <- "Kaninchen". Ich möchte die Artenvariable verwenden, weil ich auf diese Weise hoffe, durch alle Tiere hindurchzuschauen. Ist das möglich? Vielen Dank! – hpy

+1

Die andere Lösung ist, das reshape2-Paket zu verwenden, um Ihre Daten zu transformieren, so dass Sie nur zwei Spalten haben: eine mit dem Tier (Hase, Katze usw.) und die andere die Anzahl der Tiere. – mb14

+0

Danke für die aktualisierte Antwort, es hat funktioniert !! – hpy

1

Hier ist eine Art und Weise, die durch die Säulen geleitet in eine Liste von data.frames jede Untergruppe erstellt:

datasets <- lapply(colnames(mtcars), function(v) subset(mtcars, mtcars[,v] > 0)) 

einfach ändern colnames(mtcars) zu Ihrer Spezies variabel, und mtcars zu Ihrem data.frame.

+0

Vielen Dank dafür. Um ehrlich zu sein, bin ich immer noch sehr nervös in Bezug auf die Familie der Funktionen, ich kann nie herausfinden, welche zu verwenden oder wie. Daran muss ich mehr arbeiten. – hpy

+1

Es lohnt sich zu lernen! Sie sind sichere Funktionen, mit denen man experimentieren kann. lapply funktioniert gut auf Listen (welche data.frames sind). Ich denke, es ist eine viel sicherere Methode als 'assign'. – Zelazny7

+0

Danke @ Zelazny7! Ich werde nach einigen guten ELI5 Intros für diese Funktionen suchen und vielleicht versuchen, ein paar Tutorials mit Übungen zu finden. – hpy

Verwandte Themen