使用虚拟变量创建等级变量。R

数据挖掘 r 排行 虚拟变量 分层数据格式
2022-03-12 00:35:22

我有一系列描述取消访问的原因的多重响应(虚拟)变量。取消访问可能有多种原因。我的目标是以分层方式使用虚拟变量创建一个互斥变量。例如,在我的样本数据中,我的变量排名如下:Medical、NoID 和 Refuse。前任。如果由于医疗和缺乏身份证明原因取消访问,我想将我的最终变量重新编码为“医疗”,因为根据我的等级更重要。同样,VisitID 3 由于没有 ID 和拒绝访问而被取消,在这种情况下,我想将此取消重新编码为 NoID,因为 NoID 比 Refuse 更重要。
感谢您的任何帮助!

  VisitID  NoID Refuse Medical WhatINeed
1       1  TRUE  FALSE    TRUE   Medical
2       2 FALSE  FALSE   FALSE      <NA>
3       3  TRUE   TRUE   FALSE      NoID
structure(list(VisitID = c(1, 2, 3), NoID = c(TRUE, FALSE, TRUE
), Refuse = c(FALSE, FALSE, TRUE), Medical = c(TRUE, FALSE, FALSE
), WhatINeed = c("Medical", NA, "NoID")), row.names = c(NA, 3L
), class = "data.frame")
1个回答

您可以case_when()按照您的排名顺序使用和列出条件。由于您的虚拟变量已经是 os type logical,因此以下内容应该有效:

df %>% 
  mutate(
    WhatINeed_2 = case_when(
      Medical ~ "Medical",
      NoID ~ "NoID", 
      Refuse ~ "Refuse", 
      TRUE ~ NA_character_
    )
  )
  VisitID  NoID Refuse Medical WhatINeed WhatINeed_2
1       1  TRUE  FALSE    TRUE   Medical     Medical
2       2 FALSE  FALSE   FALSE      <NA>        <NA>
3       3  TRUE   TRUE   FALSE      NoID        NoID

数据

df <- structure(list(VisitID = c(1, 2, 3), NoID = c(TRUE, FALSE, TRUE
), Refuse = c(FALSE, FALSE, TRUE), Medical = c(TRUE, FALSE, FALSE
), WhatINeed = c("Medical", NA, "NoID")), row.names = c(NA, 3L
), class = "data.frame")