【问题标题】:how to use case_when over unique value first to create a new variable如何首先使用 case_when 超过唯一值来创建新变量
【发布时间】:2021-02-19 13:02:33
【问题描述】:

我有一个数据框(x)。如您所见,对于同一个 ID,我有不同的值(bp:yes/no 和 N),但有时,我有一个始终 bp ==no 的唯一 ID。

x
      ID        bp    N
      8012199   no    75
      8012199   yes   2
      8012211   no    118
      8012211   yes   2
      8012321   no    37
      8012341   no    146
      8012342   no    84
  

我想创建一个新变量 (frequency: low and high)

x
          ID        bp    N    frequency
          8012199   no    75   
          8012199   yes   2    low
          8012211   no    118  
          8012211   yes   4    high    
          8012321   no    37   low
          8012341   no    146  low 
          8012342   no    84   low

根据不同的条件:

  1. 如果 bp == 是 | n
  2. 如果 bp == 是 | n > 2 : 高
  3. 如果 ID 是唯一的(始终 = 否):低

到目前为止我尝试过的是

r <-  x %>% 
      mutate(bp= case_when(
      duplicated(ID)==FALSE  ~ "low",
      bp %in% "yes" & n <=2 ~ "low",
      bp %in% "yes" & n > 2 ~ "high" ))

duplicated(x$ID)
FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE 

它对“是”条件有效,但对重复无效。任何建议都会很棒!

【问题讨论】:

    标签: r unique case-when


    【解决方案1】:

    您的两个示例略有不同 - 第 4 行中的 N 已更改。

    我使用了第二个示例数据:

    x <- tibble::tribble(
            ~ID,        ~bp,    ~N,
          "8012199",   "no",    75,
          "8012199",   "yes",   2,
          "8012211",   "no",    118,
          "8012211",   "yes",   4,
          "8012321",   "no",    37,
          "8012341",   "no",    146,
          "8012342",   "no",    84
    )
    

    这是使用 tidyverse 的解决方案:

    library(tidyverse)
    x %>% 
      group_by(ID) %>% 
      mutate(
        id_count = n(),
        frequency = case_when(
        bp == "yes" & N <=2 ~ "low",
        bp == "yes" & N > 2 ~ "high",
        bp == "no" & id_count == 1 ~ "low",
        TRUE ~ "")
      ) %>% 
      ungroup() %>% 
      select(-id_count)
    

    基本上,id_count 变量计算每个 ID 号的行数。然后将其用于生成low 频率结果。

    另外,请注意我使用 N

    【讨论】:

      猜你喜欢
      • 2020-01-27
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      相关资源
      最近更新 更多