通常,当我计算数据框中的列时,我使用
count()
包中的 dplyr
函数。
library(dplyr)
mtcars %>%
count(cyl)
和
mtcars %>%
count(am)
和
mtcars %>%
count(gear)
等等... 现在我想一次性数出
cyl, am, gear
。
注:我不是这个意思
mtcars %>%
count(cyl, am, gear)
到目前为止我的工作方法:
library(dplyr)
library(tidyr)
mtcars %>%
count(am) %>%
bind_rows(mtcars %>%
count(cyl)) %>%
bind_rows(mtcars %>%
count(gear)) %>%
pivot_longer(-n,
values_drop_na = TRUE) %>%
unite("variable", c("name", "value")) %>%
relocate(variable, n)
variable n
<chr> <int>
1 am_0 19
2 am_1 13
3 cyl_4 11
4 cyl_6 7
5 cyl_8 14
6 gear_3 15
7 gear_4 12
8 gear_5 5
我想知道是否有更简洁的方法来实现这一点。
也许旋转并计数?
library(dplyr)
library(tidyr) # pivot_longer
select(mtcars, am, cyl, gear) |>
pivot_longer(cols = everything()) |>
count(name, value)
# # A tibble: 8 × 3
# name value n
# <chr> <dbl> <int>
# 1 am 0 19
# 2 am 1 13
# 3 cyl 4 11
# 4 cyl 6 7
# 5 cyl 8 14
# 6 gear 3 15
# 7 gear 4 12
# 8 gear 5 5
如果需要,您可以通过将名称粘贴在一起来“清理”这些名称。