【问题标题】:Transform long format data into compact summary table with multiple values in each cell in R将长格式数据转换为 R 中每个单元格中具有多个值的紧凑汇总表
【发布时间】:2021-10-27 15:03:56
【问题描述】:

我需要将包含每个汇总统计数据的列和每个组/访问组合的行的长格式表转换为一个紧凑的表,其中每个组的行和每次访问的列。以照片为例。

【问题讨论】:

    标签: r dataframe reshape


    【解决方案1】:

    基本 R 选项可能会有所帮助

    reshape(
      transform(
        df,
        Day = sprintf("%s±%s(n=%s)", mean, round(SE, 2), n)
      )[c("Visit", "Group", "Day")],
      direction = "wide",
      idvar = "Group",
      timevar = "Visit"
    )
    

    【讨论】:

    • 非常感谢!
    • 不客气。如果您发现它们有用,请考虑accepting 任何(不一定是我的)答案。
    【解决方案2】:

    你可以使用:

    library(tidyr)
    library(dplyr)
    
    df %>% 
      mutate(value = paste0(mean, " ± ", round(SE, 2), " (n = ", n, ")")) %>% 
      pivot_wider(id_cols = Group,
                  names_from = Visit,
                  names_prefix = "Day_",
                  values_from = value)
    

    返回

      Group Day_1               Day_2               Day_3              
      <chr> <chr>               <chr>               <chr>              
    1 A     27 ± 0.33 (n = 100) 22 ± 0.81 (n = 100) 21 ± 0.79 (n = 100)
    2 B     29 ± 0.82 (n = 100) 23 ± 0.93 (n = 100) 20 ± 0.96 (n = 100)
    3 C     24 ± 0.37 (n = 100) 26 ± 0.24 (n = 100) 25 ± 0.1 (n = 100) 
    

    数据

    df <- structure(list(Visit = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), 
        Group = c("A", "B", "C", "A", "B", "C", "A", "B", "C"), mean = c(27L, 
        29L, 24L, 22L, 23L, 26L, 21L, 20L, 25L), SE = c(0.332081410568208, 
        0.818319256883115, 0.371742388699204, 0.809606711380184, 
        0.931074212538078, 0.244411387946457, 0.79078992898576, 0.955696877092123, 
        0.0983989259693772), n = c(100, 100, 100, 100, 100, 100, 
        100, 100, 100)), class = "data.frame", row.names = c(NA, 
    -9L))
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2021-08-23
    • 2016-01-07
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多