R 中的 n() 和 count() 有什么区别?什么时候应该倾向于使用其中之一或两者?

Ama*_*aks 6 r count dplyr

您能帮我解释一下何时使用 count() 与 n() 函数吗?

这将帮助我理解为什么以下代码给出了两个不同的输出。

R 编程

代码1

fueleconomy::vehicles %>% 
  distinct(model, make ) %>%
  group_by( model ) %>%
  count() %>%
  filter( n > 1 ) %>%
  arrange( desc( n ))
Run Code Online (Sandbox Code Playgroud)

代码1输出

A tibble 60 X 2
组:型号 [60]

代码2

fueleconomy::vehicles %>% 
  distinct(model, make ) %>%
  group_by( model ) %>%
  filter( n() > 1 ) %>%
  arrange( model )
Run Code Online (Sandbox Code Playgroud)

代码2输出

A tibble 126 X 2
组:模型 [60]

注意:我期望这两个代码给出相同的输出,但它们没有。因此,我很困惑,希望对 n() 和 count() 函数之间的主要区别进行一些澄清。另外,什么时候可以使用其中一种来代替另一种?
在某些情况下两者可以一起使用吗?

Ps:我是一个初学者,没有任何编程背景,也没有自学,所以,温柔一点。

预先感谢您的帮助。

Ben*_*ris 7

dplyr函数中count()相当于summarize(n = n()). 因为summarize()被调用,所以每个模型仅返回一行。该summarize()函数创建一个新列,保留分组变量,并丢弃其他变量(例如您的情况下的 make )。

当您使用 时filter(n() > 1),您没有执行该summarize()操作,因此您将返回每个模型的所有行。此方法也不会创建新n列,也不会丢弃非分组列。


Ron*_*hah 2

您不能直接将一个函数与另一个函数进行比较。应用函数的顺序/顺序很重要,需要考虑。记下之前和之后应用了哪个函数也很重要。

\n

在这种情况下,应用count,您会为每个 获得一行model。它是一个聚合数据框。

\n
library(dplyr)\n\ncount_data <- fueleconomy::vehicles %>% \n  distinct(model, make ) %>%\n  group_by( model ) %>%\n  count() %>%\n  filter( n > 1 ) %>%\n  arrange( desc( n ))\n\ncount_data\n\n#   model                   n\n#   <chr>               <int>\n# 1 Coachbuilder Wagon      3\n# 2 Conquest                3\n# 3 Laser                   3\n# 4 Limousine               3\n# 5 Truck 2WD               3\n# 6 Truck 4WD               3\n# 7 200                     2\n# 8 240 DL/240 GL Wagon     2\n# 9 300E                    2\n#10 300SL                   2\n# \xe2\x80\xa6 with 50 more rows\n
Run Code Online (Sandbox Code Playgroud)\n

注意输出。它说'Coachbuilder Wagon'发生 3 次,'Conquest'发生 3 次,依此类推。

\n

现在将其与n()输出进行比较。

\n
n_Data <- fueleconomy::vehicles %>% \n  distinct(model, make ) %>%\n  group_by( model ) %>%\n  filter( n() > 1 ) %>%\n  arrange( model )\n\nn_Data\n\n#   make                   model              \n#   <chr>                  <chr>              \n# 1 Audi                   200                \n# 2 Chrysler               200                \n# 3 Mcevoy Motors          240 DL/240 GL Wagon\n# 4 Volvo                  240 DL/240 GL Wagon\n# 5 Lambda Control Systems 300E               \n# 6 Mercedes-Benz          300E               \n# 7 J.K. Motors            300SL              \n# 8 Mercedes-Benz          300SL              \n# 9 Mercedes-Benz          500SE              \n#10 Texas Coach Company    500SE              \n# \xe2\x80\xa6 with 116 more rows\n
Run Code Online (Sandbox Code Playgroud)\n

这不是聚合数据框,model仍然有多行。

\n

这两个输出数据如何关联?

\n
sum(count_data$n)\n#[1] 126\n\nnrow(n_Data)\n#[1] 126\n
Run Code Online (Sandbox Code Playgroud)\n