【问题标题】:How to create tibble summarising missing imaging data in R如何创建 tibble 总结 R 中缺失的成像数据
【发布时间】:2023-01-15 22:41:36
【问题描述】:

我正在使用类似于以下格式的成像数据:

   name  side  modality
   <chr> <chr> <chr>   
 1 alex  right xray    
 2 alex  left xray    
 3 brad  right xray    
 4 brad  left  xray    
 5 alex  right ct      
 6 alex  left  ct      
 7 brad  right ct      
 8 alex  right mri     
 9 brad  right mri     
10 brad  left  mri

鉴于每个人都应该有所有模态的左图像和右图像,它表明亚历克斯缺少左侧 MRI,布拉德缺少左侧 CT。我正在尝试创建一个汇总表,显示哪些元素“存在”或“不存在”,给定一个列表 名字。它看起来像这样:

  name    left_xray right_xray left_ct right_ct left_mri right_mri n_absent
  <chr>   <chr>     <chr>      <chr>   <chr>    <chr>    <chr>        <dbl>
1 alex    present   present    present present  absent   present          1
2 brad    present   present    absent  present  present  present          1
3 charlie absent    absent     absent  absent   absent   absent           6

我使用了各种 dplyr 动词来获取每种模式都缺少数据的患者列表,但我不太确定从哪里开始创建汇总表。

虚拟数据:

data <- tibble(name = c('alex', 'alex', 'brad', 'brad', 'alex', 'alex', 'brad', 'alex', 'brad', 'brad'),
                        side = c('right', 'left', 'right', 'left', 'right', 'left', 'right', 'right','right','left'),
                        modality = c('xray','xray','xray','xray','ct','ct','ct','mri','mri','mri'))

names <- tibble(name = c('alex', 'brad', 'charlie'))

谢谢!

【问题讨论】:

    标签: r dplyr tibble


    【解决方案1】:

    代码

    library(dplyr)
    library(tidyr)
    
    expand_grid(
      name = c('alex', 'brad', 'charlie'),
      modality = c("xray","ct","mri"),
      side = c("right",'left')
      ) %>% 
      left_join(
        data %>% 
          mutate(aux = "present")
      )  %>% 
      mutate(aux = replace_na(aux,"absent")) %>% 
      unite(modality_side,side,modality) %>% 
      pivot_wider(names_from = modality_side,values_from = aux) %>%
      rowwise() %>% 
      mutate(n_absent = sum(c_across(-name) == "absent"))
    

    输出

    # A tibble: 3 x 8
    # Rowwise: 
      name    right_xray left_xray right_ct left_ct right_mri left_mri n_absent
      <chr>   <chr>      <chr>     <chr>    <chr>   <chr>     <chr>       <int>
    1 alex    present    present   present  present present   absent          1
    2 brad    present    present   present  absent  present   present         1
    3 charlie absent     absent    absent   absent  absent    absent          6
    

    【讨论】:

    • 谢谢!次要请求(抱歉,如果最初的问题不清楚)是否可以以这样一种方式进行编辑,即摘要还可以包含数据标题中根本不存在的名称。在此示例中,Charlie 在名称 tibble 中,但不在数据 tibble 中。似乎所有名称都必须至少有一个图像才能使“完整”动词起作用。
    【解决方案2】:

    您可以先将 sidemodality 列连接在一起,然后生成它和名称的 complete 组合。然后将这个“长”格式转换为“宽”格式,并计算缺席数。

    library(tidyverse)
    
    data %>% mutate(tmp = paste0(side, "_", modality), 
                    tmp2 = 1, 
                    .keep = "unused") %>% 
      complete(name, tmp) %>% 
      pivot_wider(names_from = tmp, values_from = tmp2) %>% 
      mutate(across(-name, ~ifelse(is.na(.x), "absent", "present"))) %>% 
      rowwise() %>% 
      mutate(n_absent = sum(c_across(-name) == "absent")) %>% 
      ungroup()
    
    # A tibble: 2 × 8
      name  left_ct left_mri left_xray right_ct right_mri right_…¹ n_abs…²
      <chr> <chr>   <chr>    <chr>     <chr>    <chr>     <chr>      <int>
    1 alex  present absent   present   present  present   present        1
    2 brad  absent  present  present   present  present   present        1
    # … with abbreviated variable names ¹​right_xray, ²​n_absent
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2021-12-23
      • 2016-11-10
      • 2018-05-08
      相关资源
      最近更新 更多