library(dplyr)
distinct(mtcars, mpg)
Zeigt die eindeutigen Vorkommen von mpg-Klassen in mtcars an.
n_distinct(mtcars, mpg)
zählt sie und zeigt die korrekte Anzahl an 32
.
distinct(mtcars, cyl)
Zeigt die eindeutigen Vorkommen von Zylinderklassen in mtcars an.
n_distinct(mtcars, cyl)
gibt einen Fehler aus. Warum funktioniert es nicht wie im obigen mpg-Beispiel? Ich bekomme diesen falschen Fehler ... das Objekt cyl befindet sich im mtcars-Datenrahmen, das versichere ich Ihnen.
Error in n_distinct_multi(list(...), na.rm) : object "cyl" not found
Antworten:
5 für die Antwort № 1Das dplyr::n_distinct()
Funktion ist kein Tabellenverb mutate()
, filter()
usw. Sein ...
Parameter sollte "Vektoren von Werten" sein (laut offiziellen Unterlagen).
Also wenn du sagst dplyr::n_distinct(mtcars, mpg)
, was passiert wirklich? ist das die eindeutigen Werte des ersten Arguments mtcars
werden gezählt.
Da es 32 verschiedene Zeilen hat, lautet der Wert 32
. Im letzten Beispiel haben Sie zu Verfügung stellen, cyl
wird nicht erkannt, da kein Objekt aufgerufen wird cyl
-- Der Grund dass mpg
ist anerkannt zu werden ist das mpg
bezieht sich auf Datensatz ggplot2::mpg
, nicht zur Spalte von mtcars
mit dem gleichen Namen!
Um zu sehen, was ich meine, führen Sie folgendes aus:
dplyr::n_distinct(mtcars) # 32
dplyr::n_distinct(ggplot2::mpg) # 225
dplyr::n_distinct(mtcars, mpg) # 32
dplyr::n_distinct(mtcars, ggplot2::mpg) # 32
Wenn Sie die Anzahl der eindeutigen Werte in zählen möchten mtcars$cyl
und mtcars$mpg
. dann benutze einfach:
dplyr::n_distinct(mtcars$cyl) # 3
dplyr::n_distinct(mtcars$mpg) # 25
Eine knifflige Sache!
3 für die Antwort № 2
Ihr Anruf an n_distinct(mtcars, mpg)
gibt nicht den korrekten Wert zurück, der 25 wäre. Stattdessen gibt diese Zeile die Anzahl der eindeutigen Zeilen in der gesamten Tabelle an mtcars
, das ist 32 entsprechend der Ausgabe von distinct(mtcars)
.
Was Sie anrufen möchten, ist n_distinct(mtcars$mpg)
die 25 zurückgibt, oder auf ähnliche Weise cyl
Spalte, die Sie sagen möchten n_distinct(mtcars$cyl)
oder n_distinct(mtcars[["cyl"]])
(Äquivalent).
> distinct(mtcars, cyl)
cyl
1 6
2 4
3 8
> n_distinct(mtcars$cyl)
[1] 3