获取df的每一列的摘要(dplyr::count)

获取df的每一列的摘要(dplyr::count),r,dplyr,count,R,Dplyr,Count,我有以下数据帧 tbl <- structure(list(col1 = c("a", NA, "b", NA, "c", "c"), col2 = c("n", "n", "b", "a", NA, "c"), col3 = c("z", "a", "z", "b", "1", "c" )), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame" )) tbl我们可以使用map循环名称,并应用count lib

我有以下数据帧

tbl <- structure(list(col1 = c("a", NA, "b", NA, "c", "c"), col2 = c("n", 
"n", "b", "a", NA, "c"), col3 = c("z", "a", "z", "b", "1", "c"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

tbl我们可以使用
map
循环
名称
,并应用
count

library(dplyr)
library(purrr)
map(names(tbl), ~ tbl %>% 
                     select(.x) %>% 
                     count(!! rlang::sym(.x)))

或者可以将
表格
汇总
一起应用,并返回一个
列表

tbl %>%
    summarise_all( ~ list(table(.)))
或表示不同元素的数量

tbl %>%
    summarise_all(n_distinct)

或在
base R

lapply(tbl, function(x) as.data.frame(table(x)))

使用
dplyr
purrr
的一种解决方案可能是,对于不同值的数量:

map(tbl, n_distinct)

$col1
[1] 4

$col2
[1] 5

$col3
[1] 5
对于计数:

map(tbl, table)

$col1

a b c 
1 1 2 

$col2

a b c n 
1 1 1 2 

$col3

1 a b c z 
1 1 1 1 2 

谢谢!rlang::sym(.x)做什么?@user171558抱歉,忘了回复。这里,
名称
是字符串,
sym
将这些字符串转换为可以计算的符号(
!!
)以返回存储在该列中的值为什么映射第一列。您可以只使用
summary()
。@j3ypi,因为另一个用户正使用这种方法。我只是增加了一种可能性:)
map(tbl, table)

$col1

a b c 
1 1 2 

$col2

a b c n 
1 1 1 2 

$col3

1 a b c z 
1 1 1 1 2