library(dplyr)
distinct(mtcars, mpg)
显示mtcars中唯一出现的mpg类。
n_distinct(mtcars, mpg)
计算它们并显示正确的计数32
。
distinct(mtcars, cyl)
显示mtcars中唯一出现的柱面类。
n_distinct(mtcars, cyl)
会产生错误。为什么它不像上面的mpg例子那样工作?我得到了这个错误的错误......对象cyl在mtcars数据框中,我向你保证。
Error in n_distinct_multi(list(...), na.rm) : object 'cyl' not found
答案 0 :(得分:5)
dplyr::n_distinct()
函数不是mutate()
,filter()
等表格动词。其...
参数应该是"值的向量" (根据官方文件)。
所以当你说dplyr::n_distinct(mtcars, mpg)
时,真正发生了什么
是计算第一个参数mtcars
的唯一值。
由于它有32个不同的行,因此值为32
。在最后的例子中你
提供,cyl
无法识别,因为没有名为cyl
的对象 - mpg
被识别的原因是mpg
指的是该
数据集ggplot2::mpg
,不到具有相同名称的mtcars
列!
要了解我的意思,请运行以下命令:
dplyr::n_distinct(mtcars) # 32
dplyr::n_distinct(ggplot2::mpg) # 225
dplyr::n_distinct(mtcars, mpg) # 32
dplyr::n_distinct(mtcars, ggplot2::mpg) # 32
如果您想计算mtcars$cyl
和mtcars$mpg
中唯一值的数量,
然后只需使用:
dplyr::n_distinct(mtcars$cyl) # 3
dplyr::n_distinct(mtcars$mpg) # 25
一个棘手的人!
答案 1 :(得分:3)
您对n_distinct(mtcars, mpg)
的调用未返回正确的值,即25,而是此行为您提供整个表mtcars
中的唯一行数,根据distinct(mtcars)
的输出。
您要拨打的内容是n_distinct(mtcars$mpg)
,其中cyl
列会返回25,或类似地说n_distinct(mtcars$cyl)
或n_distinct(mtcars[["cyl"]])
(等效)。
> distinct(mtcars, cyl)
cyl
1 6
2 4
3 8
> n_distinct(mtcars$cyl)
[1] 3