Выберите строки, где значения для разных столбцов НЕ являются определенным значением в R

#r

#r

Вопрос:

У меня есть 6 разных столбцов: call_outcome_1 — call_outcome_6

Каждое из них может быть значением от 0 до 5 (0 = абонент достигнут, 2 = оставленное сообщение и т.д.)

Я пытаюсь выбрать строки, где ни один из этих 6 столбцов = 0 (иначе говоря, человек так и не был достигнут)

Однако некоторые из этих значений являются NA. Например, если пользователь был достигнут при первом вызове, то call_outcomes 2-6 будет NA.

Я пытался:

 not_interviewed=data %>%
  filter(call_outcome_1 !=0 amp; call_outcome_2!=0 amp; call_outcome_2 !=0 amp; call_outcome_3 !=0 amp; call_outcome_4 !=0 amp; call_outcome_5 !=0 amp; call_outcome_6 !=0) %>%
  select(record_id)
not_interviewed
  

Это дает мне записи, в которых заполнены все 6 попыток вызова (без NAs), и ни одна из них не равна 0. Это исключает записи, в которых есть значения NA для любого из результатов. Я попробовал na.rm=FALSE и получаю ошибку. Буду признателен за любую помощь, я довольно новичок в R 🙂

Комментарии:

1. Сложно помочь без примеров данных, но как насчет filter_at(your_df, vars(starts_with('call_outcome')), all_vars(. > 0 | is.na(.)))

Ответ №1:

Вы могли бы проверить, отличается ли оно от нуля или оно NA с помощью этого кода:

 filter( (call_outcome_1 !=0 |is.na(call_outcome_1)==TRUE) amp; (call_outcome_2 !=0 |is.na(call_outcome_2)==TRUE) ...continue... amp; (call_outcome_6 !=0 |is.na(call_outcome_6)==TRUE))  )
  

Ответ №2:

Рассмотрим этот простой пример :

 data <- data.frame(a = 1:5, call_outcome_1 = c(0, NA, 1, 2, 0), 
                   call_outcome_2 = c(NA, 2, 1, 2, 3))
data
#  a call_outcome_1 call_outcome_2
#1 1              0             NA
#2 2             NA              2
#3 3              1              1
#4 4              2              2
#5 5              0              3
  

Чтобы выбрать строки, где ни одно из значений не равно 0, вы можете использовать rowSums

 cols <- grep('call_outcome', names(data))
data[rowSums(data[cols] == 0, na.rm = TRUE) == 0, ]

#  a call_outcome_1 call_outcome_2
#2 2             NA              2
#3 3              1              1
#4 4              2              2