【问题标题】:summarizing a list of character vectors using forcats and purrr使用 forcats 和 purrr 总结字符向量列表
【发布时间】:2020-01-24 05:02:34
【问题描述】:

我有 tibble,其中col1 是可变长度的字符向量列表,col2 是指示组分配的数字向量,1 或 0。我想首先转换列表中的所有字符向量(col1) 到因子,然后统一这些因子中的所有因子水平,以便我最终可以获得每个因子水平的计数。对于下面的示例数据,这意味着计数如下:

总体:

    level, count  
    "a", 2
    "b", 2
    "c", 2
    "d", 3
    "e", 1

对于组=1:

    level, count  
    "a", 1
    "b", 2
    "c", 1
    "d", 1
    "e", 0

对于组=0:

    level, count  
    "a", 1
    "b", 0
    "c", 1
    "d", 2
    "e", 1

最终目标是能够得到每个因子水平的总计数c("a","b","c","d","e"),并通过分组变量绘制它们。

这里有一些代码可以更好地解决我的问题:

library(forcats)
library(purrr)
library(dplyr)
library(ggplot2)

tib <- tibble(col1=list(c("a","b"),
                 c("b","c","d"), 
                 c("a","d","e"),
                 c("c","d")),
       col2=c(1,1,0,0))


tib %>% 
  mutate(col3=map(.$col1,.f = as_factor)) %>% 
  mutate(col4=map(.$col3,.f = fct_unify))

很遗憾,此代码失败。我收到以下错误,但不知道为什么:

Error:fsmust be a list

我以为我的输入是一个列表?

感谢任何人提供的任何帮助。谢谢。

【问题讨论】:

    标签: r ggplot2 dplyr purrr forcats


    【解决方案1】:

    你可以先unnestcount

    library(dplyr)
    library(tidyr)
    
    tib %>%
      unnest(col = col1) %>%
      #If needed col1 as factors
      #mutate(col1 =factor(col1)) %>%
      count(col1)
    
    #  col1      n
    #  <fct> <int>
    #1 a         2
    #2 b         2
    #3 c         2
    #4 d         3
    #5 e         1
    

    count基于组,即col2,我们可以做

    tib %>% 
      unnest(col = col1) %>% 
      mutate_at(vars(col1, col2), factor) %>%
      count(col1, col2, .drop = FALSE)
    
    #   col1  col2      n
    #   <fct> <fct> <int>
    # 1 a     0         1
    # 2 a     1         1
    # 3 b     0         0
    # 4 b     1         2
    # 5 c     0         1
    # 6 c     1         1
    # 7 d     0         2
    # 8 d     1         1
    # 9 e     0         1
    #10 e     1         0
    

    【讨论】:

    • 谢谢@Ronak Shah。我想我想统一因子水平,以便我可以更轻松地比较图 - 在您提供的分组示例中,看起来计数为 0 的因子水平没有显示。 group=0 的级别“b”应该有 n=0;同样地; group = 1 的级别“e”应该有 n=0。
    • @HumanityFirst 好的,更新了答案。现在它也显示计数为 0 的因子。
    • 哇,这真是解决我问题的好方法——谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多