R计数的区别不一致

sta*_*tor 2 r

library(dplyr)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

lef*_*fft 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 
Run Code Online (Sandbox Code Playgroud)

如果您希望计算唯一值的数量mtcars$cylmtcars$mpg,然后只需使用:

dplyr::n_distinct(mtcars$cyl) # 3 
dplyr::n_distinct(mtcars$mpg) # 25 
Run Code Online (Sandbox Code Playgroud)

一个棘手的!