我正在使用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
我上周正在使用此计数函数,如上所述,它用于输出所需的结果。但是,当本周对其他字段进行一些更改后重新运行我的代码时,它现在输出的是总计。
有人知道为什么它已更改或如何解决?
谢谢。
答案 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
@akrun发表评论后,我决定使用更大的数据框来测试这两种方式。
结果现在支持autoplot(mb)
。
dplyr