您能帮我解释一下何时使用 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:我是一个初学者,没有任何编程背景,也没有自学,所以,温柔一点。
预先感谢您的帮助。
在dplyr函数中count()相当于summarize(n = n()). 因为summarize()被调用,所以每个模型仅返回一行。该summarize()函数创建一个新列,保留分组变量,并丢弃其他变量(例如您的情况下的 make )。
当您使用 时filter(n() > 1),您没有执行该summarize()操作,因此您将返回每个模型的所有行。此方法也不会创建新n列,也不会丢弃非分组列。
您不能直接将一个函数与另一个函数进行比较。应用函数的顺序/顺序很重要,需要考虑。记下之前和之后应用了哪个函数也很重要。
\n在这种情况下,应用count,您会为每个 获得一行model。它是一个聚合数据框。
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\nRun Code Online (Sandbox Code Playgroud)\n注意输出。它说'Coachbuilder Wagon'发生 3 次,'Conquest'发生 3 次,依此类推。
现在将其与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\nRun Code Online (Sandbox Code Playgroud)\n这不是聚合数据框,model仍然有多行。
这两个输出数据如何关联?
\nsum(count_data$n)\n#[1] 126\n\nnrow(n_Data)\n#[1] 126\nRun Code Online (Sandbox Code Playgroud)\n