【问题标题】:Is there a way to group data based on a column that separates values with commas in R?有没有办法根据在 R 中用逗号分隔值的列对数据进行分组?
【发布时间】:2020-10-06 10:44:55
【问题描述】:

假设有数据框A:

   A  B
1  1  gr1, gr2
2  3  class1, gr1
3  4  gr2

有没有办法汇总 B 列中每个逗号分隔的字母的数据? 例如,要像这样获得它们的平均值:

   group   mean
1  gr1     2
2  gr2     2.5
3  class1  3

【问题讨论】:

    标签: r dplyr summary


    【解决方案1】:

    这可以通过 tidyr 的 separate_rows() 函数轻松完成:

    library(tidyverse)
    
    dat <-
      tibble(A = c(1, 3, 4),
             B = c("gr1, gr2", "class1, gr1", "gr2"))
    
    dat %>%
      separate_rows(B, sep = ", ") %>% 
      group_by(B) %>% 
      summarize(mean = mean(A))
    
    
    # A tibble: 3 x 2
      B       mean
      <chr>  <dbl>
    1 class1   3  
    2 gr1      2  
    3 gr2      2.5
    

    【讨论】:

      【解决方案2】:

      base R 中的一个选项与'B' 列上的strsplit 一起创建list,然后使用tapply,得到meanreplicated 'A' 值所在的组是unlisted 拆分值

      lst1 <- with(df1, strsplit(B, ",\\s+"))
      tapply(rep(df1$A, lengths(lst1)), unlist(lst1), FUN = mean)
      # class1    gr1    gr2 
      #   3.0    2.0    2.5 
      

      【讨论】:

        猜你喜欢
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多