2017-11-04 1 views
0

Ich bin neu hier und habe seit vielen Stunden gesucht, so tut es mir leid, wenn das anderswo beantwortet wird und könnte besser formuliert werden. Ich möchte die Zählungen basierend auf der Interaktion von Faktoren innerhalb einer Spalte und über andere Spalten isolieren, so dass ich einige Analysen zu den Zählungen durchführen kann. Hier ist ein Spielzeug-Datensatz der Anzahl der Parasiten in Wirten mit zwei taxonomischen Ebenen von jedem. Der Datensatz ist in beiden Dimensionen viel größer.Wechselwirkungen zwischen Faktoren und Spalten isolieren?

df <- setNames(data.frame(matrix(ncol = 5, nrow = 16)), c("count", "hostclass","hostspecies", "parclass","parspecies")) 
df$count <- c(1,2,1,2,1,1,2,3,5,1,2,3,4,1,2,3) 
df$hostclass <- c(rep("mammal",8),rep("bird",8)) 
df$parclass <- c("cestode",rep("trematode",5), rep("arachnid",6),rep("cestode",4)) 
df$hostspecies <- c(rep("human",3),rep("dog",3),rep("cat",2), rep("crow",4),rep("duck",4)) 
df$parspecies <- c("worm1",rep("fluke1",3), rep("fluke2",2), rep("tick1", 3), rep("tick2",3),rep("worm2",4)) 

Hier ist ein wenig von der Spielzeug Daten:

df
Zählung hostclass hostspecies parclass parspecies
1 1 Säugetier ein Mensch cestode worm1
2 2 Säugetier ein Mensch Trematoden fluke1
3 1 Säugetier Mensch Trematode fluke1
4 2 Säugetier Hund Trematode fluke1
5 1 Säugetier Hund trematode fluke2

ich den Datenrahmen in eine Liste aufgeteilt in zwei Spalten auf der Interaktion basiert, und dann die Zählungen isolieren:

Inter <- split(df, with(df, interaction(df$hostclass, df$parspecies)), drop = TRUE) 
cnts <- lapply(Inter,'[[',1) 

Aber ich möchte dies von Host für jede Interaktion tun und Parasitengruppierung:
1) Homespecies-Parspecies;
2) hostspecies-parclass;
3) hostclass-parspecies (Beispiel oben);
4) hostclass-parclass.

Mit anderen Worten, ich möchte die Wechselwirkung der Faktoren in zwei Spalten und erweitert auf alle Interaktionen aller Wirt und Parasiten Spalten.

Idealerweise würde die Ausgabe wie cnts aussehen, nur viel länger, da sie alle in 1 bis 4 aufgelisteten Wechselwirkungen enthalten würde. Vielen Dank für Ihre Hilfe!

Antwort

0

In dplyr können Sie count (n()) auf gruppiert (group_by) Spalten

Verwandte Themen