簡體   English   中英

使用 case_when 內部 mutate

[英]Using case_when inside mutate across

我有這樣的調查數據。 唯一的回答是“NA”或“Yes”。

    data_in <-read_table2("ID   Q26_1_1 Q26_1_2 Q26_1_3 Q26_1_4
1   NA  NA  NA  Yes
2   NA  NA  NA  NA
3   Yes Yes Yes NA
4   NA  Yes Yes NA
5   NA  NA  NA  NA
")

我必須對數據應用以下邏輯:

  1. 如果Q26_1_4 ==“是”,那么 Q26_1_1、Q26_1_2、Q26_1_3 應該是“否”。
  2. 如果 Q26_1_1,Q26_1_2,Q26_1_3三個變量中的任何一個是“是”,那么所有其他 26_1 系列字段(Q26_1_1、Q26_1_2、Q26_1_3、Q26_1_4)都應該是“否”(當然,不包括具有其中的“是”)。
  3. 如果整個系列都是 NA,則將其保留為 NA。

我能夠執行第一個和第三個邏輯,但我正在努力執行第二個邏輯:

  • 如果 Q26_1_1,Q26_1_2,Q26_1_3三個變量中的任何一個是“是”,那么所有其他 26_1 系列字段(Q26_1_1、Q26_1_2、Q26_1_3、Q26_1_4)都應該是“否”(當然,不包括具有其中的“是”)。 嘗試將這些“是”字段保持原樣,同時將其他字段更改為“否”會出現困難。

這是我到目前為止的地方:

  attempt <- data_in %>% mutate(across(matches("^Q26_1_1$|Q26_1_2$|Q26_1_3$"),.fns=~case_when(Q26_1_4=="Yes"~"No",
                                                                                    TRUE~as.character(.))))

這就是我希望我的數據的樣子:

data_out <- read_table2("ID Q26_1_1 Q26_1_2 Q26_1_3 Q26_1_4
1   No  No  No  Yes
2   NA  NA  NA  NA
3   Yes Yes Yes No
4   No  Yes Yes No
5   NA  NA  NA  NA
")

非常感謝任何建議! 我想我可能必須使用循環,但我不知道如何使用。 如果我轉換為數字並對所有 4 列求和,我可以使用類似..?

  for (i in data_in){
    if (is.na(i) & data_in[5]>0) {
      i=="No"
    }
  }

我們可以使用輔助列來做到這一點。 (當然,您可以... select(-any_yes)最后進行清理。)

data_in %>%
  mutate(
    # Logic 1
    across(matches("^Q26_1_[1-3]$"),
      ~case_when(Q26_1_4 == "Yes" ~ "No", TRUE ~ .)
    ),
    # Logic 2
    any_yes = rowSums(select(., matches("^Q26_1_[1-3]$")) == "Yes", na.rm = TRUE) >= 1,
    across(matches("^Q26_1_[0-9]$"),
      ~ case_when(
        any_yes ~ coalesce(., "No"), # logic 2
        TRUE ~ .                     # logic 3
      )     
    ))
# # A tibble: 5 x 6
#      ID Q26_1_1 Q26_1_2 Q26_1_3 Q26_1_4 any_yes
#   <dbl> <chr>   <chr>   <chr>   <chr>   <lgl>  
# 1     1 No      No      No      Yes     FALSE  
# 2     2 NA      NA      NA      NA      FALSE  
# 3     3 Yes     Yes     Yes     No      TRUE   
# 4     4 No      Yes     Yes     No      TRUE   
# 5     5 NA      NA      NA      NA      FALSE  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM