微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用purrr :: map对列进行分组并获得频率

如何解决使用purrr :: map对列进行分组并获得频率

我正在尝试使用tidyverse代码获取多列的交叉表。

样本数据:

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中,您可以通过几种方式来实现。

  1. 使用tidyverse
purrr::map
  1. 获取长格式的数据,然后为每一列和每个值计数
library(dplyr)
purrr::map(names(df),~df %>% count(.data[[.x]]))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。