【问题标题】:How to summarize responses in column to create a new response based on column headers?如何汇总列中的响应以根据列标题创建新响应?
【发布时间】:2023-01-07 03:44:58
【问题描述】:

我的数据看起来像这样

ID<- c(1,2,3,4,5)
CV<- c("Detected", "Not Detected", "Detected", "Not Detected", "Detected")
RV<- c("Not Detected", "Detected", "Not Detected", "Detected", "Not Detected")
BP<- c("Detected", "Detected", "Not Detected", "Detected", "Detected")
FL<- c("Detected", "Detected", "Not Detected", "Detected", "Detected")

df<- data.frame(ID, CV, RV, BP, FL)

我想结合每个观察中的“检测到”响应并创建一个新列,给出每个检测到的响应的列名,就像这样

ID          CV                RV               BP              FL             Result
1           Detected          Not Detected     Detected        Detected       CV, BP, FL
2           Not Detected      Detected         Detected        Detected       RV, BP, FL
3           Detected          Not Detected     Not Detected    Not Detected   CV
4           Not Detected      Detected         Detected        Detected       RV, BP, FL
5           Detected          Not Detected     Detected        Detected       CV, BP, FL



【问题讨论】:

    标签: r if-statement dplyr tidyverse multiple-columns


    【解决方案1】:

    base R中使用apply

    df$Result <- apply(df[-1], 1, (x) toString(names(x)[x == "Detected"]))
    

    -输出

    > df
      ID           CV           RV           BP           FL     Result
    1  1     Detected Not Detected     Detected     Detected CV, BP, FL
    2  2 Not Detected     Detected     Detected     Detected RV, BP, FL
    3  3     Detected Not Detected Not Detected Not Detected         CV
    4  4 Not Detected     Detected     Detected     Detected RV, BP, FL
    5  5     Detected Not Detected     Detected     Detected CV, BP, FL
    

    【讨论】:

      【解决方案2】:
      library(dplyr)
      library(tidyr)
      
      df %>% 
        mutate(across(-ID, ~case_when(. == "Detected" ~ cur_column()), .names = 'new_{col}')) %>%
        unite(Result, starts_with('new'), na.rm = TRUE, sep = ' ')
      
        ID           CV           RV           BP           FL   Result
      1  1     Detected Not Detected     Detected     Detected CV BP FL
      2  2 Not Detected     Detected     Detected     Detected RV BP FL
      3  3     Detected Not Detected Not Detected Not Detected       CV
      4  4 Not Detected     Detected     Detected     Detected RV BP FL
      5  5     Detected Not Detected     Detected     Detected CV BP FL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 2014-07-28
        • 1970-01-01
        • 1970-01-01
        • 2019-01-17
        相关资源
        最近更新 更多