Создайте переменную индикатора в SparklyR, когда все переменные отсутствуют

Я пытаюсь использовать rowSum в sparklyr для создания индикаторной переменной, в которой отсутствуют все переменные, но кажется, что rowSum не работает в sparklyr.

Мне нужно написать имена всех переменных в функции is.na(), как показано ниже, что невозможно, так как у меня 100 переменных.

y <- c(NA,1,2)
x <- c(NA,NA,3)
z <- c(NA,NA,NA)
dt = data.frame(x,y,z)

sdf_copy_to(sc, dt)

dt %>% 
 mutate(new = ifelse(is.na(x) & is.na(y) & is.na(z), 1,0))

Есть ли способ записать несколько переменных в функцию is.na()?


person EmmaStin    schedule 14.11.2018    source источник


Ответы (1)


library(rlang)
library(glue)
  1. создайте строку со всеми интересующими именами переменных. Я призываю их всех для простоты; используйте регулярное выражение (например, grep) в противном случае

    cols_of_interest <- names(dt)
    
    
    test_string <-  glue("ifelse({glue('is.na({cols_of_interest})') %>% 
    glue_collapse(sep = '&')}, yes = 1, no = 0)")
    
  2. разобрать строку с помощью rlang

    dt %>% mutate(flag = !!rlang::parse_expr(test_string))
    
person Pasqui    schedule 14.11.2018
comment
Это работает очень хорошо! Именно то, что я искал. - person EmmaStin; 15.11.2018