/ / R Anzahl der Unterscheidungen nicht konsistent - r

R Anzahl der Unterscheidungen nicht konsistent - r

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 № 1

Das 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