Ich möchte einen Datenrahmen durch eine Spalte (Eigentümer) gruppieren und einen neuen Datenrahmen ausgeben, der bei jeder Beobachtung Zählungen jeder Art eines Faktors enthält. Der reale Datenrahmen ist ziemlich groß und es gibt 10 verschiedene Faktoren. HierZusammenfassen von Zählern eines Faktors mit dplyr
ist ein Beispiel einer Eingangs:
library(dplyr)
df = tbl_df(data.frame(owner=c(0,0,1,1), obs1=c("quiet", "loud", "quiet", "loud"), obs2=c("loud", "loud", "quiet", "quiet")))
owner obs1 obs2
1 0 quiet loud
2 0 loud loud
3 1 quiet quiet
4 1 loud quiet
Ich war für die Ausgabe suchen, der wie folgt aussieht:
out = data.frame(owner=c("0", "0", "1", "1"), observation=c("obs1", "obs2", "obs1", "obs2"), quiet=c(1, 0, 1, 2), loud=c(1, 2, 1, 0))
owner observation quiet loud
1 0 obs1 1 1
2 0 obs2 0 2
3 1 obs1 1 1
4 1 obs2 2 0
Schmelzen bringt mich partway dort:
melted = tbl_df(melt(df, id=c("owner")))
owner variable value
1 0 obs1 quiet
2 0 obs1 loud
3 1 obs1 quiet
4 1 obs1 loud
5 0 obs2 loud
6 0 obs2 loud
7 1 obs2 quiet
8 1 obs2 quiet
Aber was ist der letzter Schritt? Wenn "Wert" eine Zahl wäre, würde ich einfach gehen:
melted %>% group_by(owner, variable) %>% summarise(counts=sum(value))
Vielen Dank!
Dies ist eine alte Frage gibt, aber für das, was es wert ist es ein wenig bekanntes Feature von 'dcast', die Ihnen erlaubt, Wenden Sie in diesen Fällen eine Aggregations-/Zusammenfassungsfunktion an. Ich denke, es zählt standardmäßig. – shadowtalker