Одно условие для нескольких переменных в зависимости от другого с помощью dplyr (вложенные условия)? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть следующая инструкция


df <- df %>% 
  mutate(cog = case_when(
    f_008_0 == 1 & !(is.na(f_008_1_a) & is.na(f_008_1_b) & is.na(f_008_1_c) & is.na(f_008_1_d) & is.na(f_008_1_e) & is.na(f_008_1_f) & is.na(f_008_1_g) & is.na(f_008_1_h) & is.na(f_008_1_i) & is.na(f_008_1_j)) ~ rowSums(select(.,starts_with("f_008_1"),-ends_with("k"),-ends_with("l")), na.rm = T),
    f_008_0 == 1 & f_008_1_l == 1 ~ 0,
    f_008_0 == 1 & f_008_1_k == 1 ~ 997,
    f_008_0 == 2 & !(is.na(f_008_2_a) & is.na(f_008_2_b) & is.na(f_008_2_c) & is.na(f_008_2_d) & is.na(f_008_2_e) & is.na(f_008_2_f) & is.na(f_008_2_g) & is.na(f_008_2_h) & is.na(f_008_2_i) & is.na(f_008_2_j)) ~ rowSums(select(.,starts_with("f_008_2"),-ends_with("k"),-ends_with("l")), na.rm = T),
    f_008_0 == 2 & f_008_2_l == 1 ~ 0,
    f_008_0 == 2 & f_008_2_k == 1 ~ 997,
    f_008_0 == 3 & !(is.na(f_008_3_a) & is.na(f_008_3_b) & is.na(f_008_3_c) & is.na(f_008_3_d) & is.na(f_008_3_e) & is.na(f_008_3_f) & is.na(f_008_3_g) & is.na(f_008_3_h) & is.na(f_008_3_i) & is.na(f_008_3_j)) ~ rowSums(select(.,starts_with("f_008_3"),-ends_with("k"),-ends_with("l")), na.rm = T),
    f_008_0 == 3 & f_008_3_l == 1 ~ 0,
    f_008_0 == 3 & f_008_3_k == 1 ~ 997,
    f_007 == 2 ~ 997,
    TRUE ~ 999
  ))

, где переменные f_008_x_... имеют не пропущенные данные, только если f_008_0 == x для x = 1,2,3.

Это работает длямой, но мой вопрос: есть ли более элегантный и обобщенный способ сделать то же самое, используя в основном dplyr функции, такие как vars, select, filter_at, summarized_at, mutate_at, any_vars, all_vars, if_else и т. д.ошибка Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "quosures"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...