【问题标题】:How to reformat data so ID corresponds to two rows, one row contains sample source, the second row contains the result for the source如何重新格式化数据,使 ID 对应于两行,一行包含样本源,第二行包含源的结果
【发布时间】:2020-12-07 20:20:31
【问题描述】:

我正在处理约 2500 个唯一 ID 的临床数据集。一些 ID 对应于 20 多次出现。我想查看样本类型(NP、Throat 等)以及“未检测到”或“检测到”测试的结果,但我希望看到它们分布在多个列中,并且 ID 为基本上是两排。第一行是每次出现的所有样本类型,然后第二行是每次出现的结果。我可以得到第一行没有问题,但我一直无法弄清楚如何在相同的 ID 上添加第二行,结果低于相应的样本类型。任何帮助将不胜感激!

ID <- c(1,1,2,2,3,3,3,4)
Type<-c("EM","EM","PA","PA","PA","PA","PA","EM")
Specimen_Type <- c("NP", "NP", "Throat", "Throat", "NP", "Throat", "Throat", "NP")
RESULT_VAL <- c("Not Detected", "Detected", "Not Detected", "Detected", "Not Detected", "Not Detected", "Detected", "Not Detected")
RESULT_DATE <- c("6-1-2020", "6-10-2020","6-1-2020", "6-10-2020","6-1-2020", "6-10-2020", "6-20-2020", "6-1-2020")
Data_sum<- data.frame(ID, Type, Specimen_Type, RESULT_VAL, RESULT_DATE)

我希望它看起来像

ID    Type     Occurrence_1          Occurrence_2         Occurrence_3
1      EM        NP                    NP
1      EM        Not Detected          Detected
2      PA        Throat                Throat
2      PA        Not Detected          Detected
3      PA        NP                    Throat               Throat
3      PA        Not Detected          Not Detected         Detected
4      EM        NP
4      EM        Not Detected

【问题讨论】:

    标签: r reshape spread


    【解决方案1】:

    我们可以重塑为“长”,然后是“宽”

    library(dplyr)
    library(stringr)
    library(tidyr)
    library(data.table)
    Data_sum %>% 
        pivot_longer(cols = c(Specimen_Type, RESULT_VAL)) %>%
        arrange(ID, Type, 
            factor(name, levels = c('Specimen_Type', 'RESULT_VAL'))) %>% 
        mutate(rn = str_c('Occurence_', rowid(ID, Type, name))) %>% 
       select(-RESULT_DATE) %>% 
       pivot_wider(names_from = rn, values_from = value) %>%    
       select(-name)
    # A tibble: 8 x 5
    #     ID Type  Occurence_1  Occurence_2  Occurence_3
    #   <dbl> <chr> <chr>        <chr>        <chr>      
    #1     1 EM    NP           NP           <NA>       
    #2     1 EM    Not Detected Detected     <NA>       
    #3     2 PA    Throat       Throat       <NA>       
    #4     2 PA    Not Detected Detected     <NA>       
    #5     3 PA    NP           Throat       Throat     
    #6     3 PA    Not Detected Not Detected Detected   
    #7     4 EM    NP           <NA>         <NA>       
    #8     4 EM    Not Detected <NA>         <NA>    
    

    【讨论】:

    • 当我运行上面的示例代码时,除了示例 ID 3 外,一切正常。它将前 2 个响应放在适当的 Occurrence1 和 Occurrence2 列中,但第三个出现在它自己的行集中.知道为什么这会发生在我身上吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多