2016-03-30 9 views
8

Sagen, ich habe einen Datensatz wie folgt aus:dplyr gezählte Anzahl eines bestimmten Wert der Variablen

id <- c(1, 1, 2, 2, 3, 3) 
code <- c("a", "b", "a", "a", "b", "b") 
dat <- data.frame(id, code) 

Ie,

id code 
1 1 a 
2 1 b 
3 2 a 
4 2 a 
5 3 b 
6 3 b 

dplyr Verwendung, wie würde ich einen zählen, wie viele es gibt sind für jede ID

dh

id countA 
1 1 1 
2 2 2 
3 3 0 

ich Sachen wie diese versuchen, die nicht funktioniert,

countA<- dat %>% 
group_by(id) %>% 
summarise(cip.completed= count(code == "a")) 

Die mir oben gibt einen Fehler, „Fehler: nicht anwendbar Verfahren für‚group_by_‘angewendet auf ein Objekt der Klasse‚logische‘“

Danke für Ihre Hilfe!

Antwort

10

folgend statt Versuchen:

library(dplyr) 
dat %>% group_by(id) %>% 
    summarise(cip.completed= sum(code == "a")) 

Source: local data frame [3 x 2] 
    id cip.completed 
    (dbl)   (int) 
1  1    1 
2  2    2 
3  3    0 

Das funktioniert, weil die logische Bedingung code == a nur eine Reihe von Nullen und Einsen ist, und die Summe dieser Reihe ist die Anzahl der Vorkommen.

Beachten Sie, dass Sie nicht unbedingt dplyr::count innen summarise sowieso verwenden würde, wie es ein Wrapper für summarise ruft entweder n() oder sum() selbst. Siehe ?dplyr::count. Wenn Sie wirklich count verwenden möchten, könnten Sie das tun, indem Sie zuerst das Dataset filtern, um nur alle Zeilen zu behalten, in denen code==a und count dann Ihnen alle streng positive (d. H. Von Null verschiedene) Zählungen geben würden. Zum Beispiel

dat %>% filter(code==a) %>% count(id) 

Source: local data frame [2 x 2] 

    id  n 
    (dbl) (int) 
1  1  1 
2  2  2 
+0

Die Summe, die funktioniert hat. Vielen Dank! –

Verwandte Themen