R计数功能

时间:2018-08-04 18:16:04

标签: r count dplyr

我正在使用dplyr软件包来计数我的其中一列中的值的频率。我以前使用了下面的代码,直到今天它仍然可以正常工作。

library(dplyr)

df = data.frame(id = c(1,2,3,4,5,6), Leaver = c("Leaver", "Leaver","Non-Leaver","Leaver","Non-Leaver","Leaver"), office = c(1,1,3,2,3,1))

count(df, "Leaver")

这将返回以下内容:

# A tibble: 1 x 2
'"Leaver"'     n
<chr>      <int>
1 Leaver         6

我希望它返回:

Leaver        4
Non-Leaver    2

我上周正在使用此计数函数,如上所述,它用于输出所需的结果。但是,当本周对其他字段进行一些更改后重新运行我的代码时,它现在输出的是总计。

有人知道为什么它已更改或如何解决?

谢谢。

1 个答案:

答案 0 :(得分:2)

答案已经在@akrun的注释中给出,但我将回答以表明在这种情况下,基数R表现更好。

library(dplyr)
library(ggplot2)
library(microbenchmark)

mb <- microbenchmark::microbenchmark(
  base = as.data.frame(table(df$Leaver)),
  dplyr = count(df, Leaver),
  times = 1e4
)

mb
#Unit: microseconds
# expr      min        lq      mean    median       uq       max    neval
# base  402.629  415.6465  458.6573  426.1225  456.041  10882.93    10000
#dplyr 1640.708 1685.2085 1855.7103 1711.7485 1756.767 197173.87    10000

由于一幅图片价值一千个单词,因此包microbenchmark具有实用的函数来绘制结果图形,因此autoplot方法autoplot.microbenchmark用于函数{{1}返回的对象}。

microbenchmark

enter image description here

@akrun发表评论后,我决定使用更大的数据框来测试这两种方式。
结果现在支持autoplot(mb)

dplyr