问题描述
样本数据:
df <- data.frame(col1=c("a","b","c","c"),col2=c(NA,"d","e")) %>%
mutate_all(as.character)
df
col1 col2
1 a <NA>
2 b d
3 c d
4 c e
使用套用,我将执行以下操作:
apply(df,2,function(x) data.frame(table(x)))
我尝试了下面的无效代码:
df %>%
map_df(function(.x) {
group_by(.x) %>% summarise(n=n()) %>% print()
})
解决方法
可以使用purrr::map
进行以下操作:
library(purrr)
map(df,~as.data.frame(table(.x)))
#> $col1
#> .x Freq
#> 1 a 1
#> 2 b 1
#> 3 c 2
#>
#> $col2
#> .x Freq
#> 1 d 2
#> 2 e 1
,
带有lapply
lapply(df,function(x) as.data.frame(table(x)))
,
在Python38
中,您可以通过几种方式来实现。
- 使用
tidyverse
purrr::map
- 获取长格式的数据,然后为每一列和每个值计数
library(dplyr)
purrr::map(names(df),~df %>% count(.data[[.x]]))