【问题标题】:Grouping columns and getting frequency using purrr::map使用 purrr::map 对列进行分组并获取频率
【发布时间】:2021-01-25 17:24:08
【问题描述】:

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

样本数据:

df <- data.frame(col1=c("a", "b", "c", "c"), col2=c(NA, "d", "d","e"))  %>%
  mutate_all(as.character)
df
  col1 col2
1    a <NA>
2    b    d
3    c    d
4    c    e

使用 apply,我会执行以下操作:

apply(df, 2, function(x) data.frame(table(x)))

我试过下面的代码不起作用:

df %>% 
  map_df(function(.x) {
    group_by(.x) %>% summarise(n=n()) %>% print()
    })

【问题讨论】:

    标签: r dataframe purrr frequency-table


    【解决方案1】:

    tidyverse 中,您可以通过多种方式做到这一点。

    1. 按列使用purrr::map
    library(dplyr)
    purrr::map(names(df), ~df %>% count(.data[[.x]]))
    
    1. 获取长格式数据,然后计算每一列和每一个值
    df %>%
      tidyr::pivot_longer(cols = everything()) %>%
      count(name, value)
    

    【讨论】:

      【解决方案2】:

      可以使用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
      

      【讨论】:

        【解决方案3】:

        lapply 的选项

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

        【讨论】:

          猜你喜欢
          • 2017-02-17
          • 2022-01-03
          • 1970-01-01
          • 1970-01-01
          • 2018-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-05
          相关资源
          最近更新 更多