R计数的区别不一致

时间:2018-02-04 19:56:22

标签: r

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

2 个答案:

答案 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$cylmtcars$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