nehme ich an diesen Datensatz haben:ignorieren einige Dinge mit n_distinct() in dplyr
test <- data.frame(thing = c(rep(1, 4),
rep(2, 4),
rep(3, 4),
rep(4, 3),
rep(5, 1)),
thing2 = c(c("a", "b", "c", "c"),
c("a", "b", "c", "d"),
c("a", "b", "b", "b"),
c("a", "b", "c"),
c("d")))
und ich möchte wissen, wie viele einzelne thing2
mit jedem thing
so verbunden sind,
test %>%
group_by(thing) %>%
summarize(nDistinct = n_distinct(thing2))
gibt ich
thing nDistinct
1 1 3
2 2 4
3 3 2
4 4 3
5 5 1
was ist in Ordnung. Aber was ich bin wirklich interessiert ist die Anzahl der verschiedenen Dinge, die sind nichtd
in jedem Faktor Ebene.
Ich konnte die Aussage oben umschreiben und umfassen eine filter()
so dass
test %>%
group_by(thing) %>%
filter(thing2 != "d") %>%
summarize(nDistinct = n_distinct(thing2))
mich
thing nDistinct
1 1 3
2 2 3
3 3 2
4 4 3
gibt aber ich verliere die Tatsache, dass, wenn thing == 5
, es aus dem resultierenden Datenrahmen fallen gelassen wird.
Was würde Ich mag zu sehen, ist ein dplyr
(oder etwas anderes) Aussage, die mir gibt
thing nDistinct
1 1 3
2 2 3
3 3 2
4 4 3
5 5 0
ist das möglich?
Ich habe den schleichenden Verdacht, dass ich hier etwas sehr Einfaches übersehe.
Sie können immer die "traditionelle" 'Länge (einzigartig (thing2! =" D "))' –
Ich wusste, es war etwas einfaches, das ich übersehen wurde! Zwischen dieser und der Antwort unten hämmere ich meinen Kopf auf meinen Schreibtisch und frage mich, warum ich es nicht schon gesehen habe! – Steven
eine gute Taktik, sich daran zu erinnern;) –