Ich habe einen Datenrahmen insgesamt Studenten (Stu) und die Anzahl der Teilnehmer pro Gruppe (ID) die Auflistung, die an einer Tätigkeit (Sub) einnehmen:COUNTIF äquivalent in dplyr zusammenfassen
ID Stu Sub
(int) (int) (int)
1 101 80 NA
2 102 130 NA
3 103 10 NA
4 104 210 20
5 105 180 NA
6 106 150 NA
Ich mag würde zu weiß die Anzahl der Gruppen in Größenklassen (> 400> 200> 100> 0), die entweder an einer Aktivität beteiligt sind (Sub> 0) oder nicht (Sub is.na)
output <- structure(list(ID = c(101L, 102L, 103L, 104L, 105L, 106L),
Stu = c(80L, 130L, 10L, 210L, 180L, 150L),
Sub = c(NA,NA, NA, 20L, NA, NA)),
.Names = c("ID", "Stu", "Sub"),
class = c("tbl_df", "data.frame"),
row.names = c(NA, -6L))
temp <- output %>%
mutate(Stu = ifelse(Stu >= 400, 400,
ifelse(Stu >= 200, 200,
ifelse(Stu >= 100, 100, 0
)))) %>%
group_by(Stu) %>%
summarise(entries = length(!is.na(Sub)),
noentries = length(is.na(Sub)))
die Ergebnisse sollten sein:
Stu entries noentries
(dbl) (int) (int)
1 0 0 2
2 100 0 3
3 200 1 0
Aber ich bekomme:
Stu entries noentries
(dbl) (int) (int)
1 0 2 2
2 100 3 3
3 200 1 1
Wie kann ich die Länge Funktion im summarise wirken wie ein countIf machen?
etw in Ihrem letzten IFEL falsch ist se –
sorry, verpasste eine 0, sollte es jetzt funktionieren – pluke
'sum' ist die richtige Lösung wie unten erwähnt. Aus Gründen der Klarheit gibt die Länge die Länge des bereitgestellten Vektors zurück. In diesem Fall gibt die Längenfunktion unabhängig von den Wahr/Falsch-Werten die Anzahl der Elemente in jeder Gruppe zurück. – Gopala