Проблема с созданием нового столбца с использованием case_when в Dplyr

#r #dplyr #case-when

#r #dplyr #случай, когда

Вопрос:

Я пытаюсь создать новый столбец в своем фрейме данных, который будет содержать только те приемники, которые мы настроили в одном из них. Я проверил другие страницы здесь, но я все еще получаю ту же ошибку:

<ошибка / dplyr:::mutate_error> Проблема с mutate() вводом ER . x Случай 1 ( Receiver %in% c("1326", "1315", "1314", "1321", "1404", "1318", "1325", "1313... ) должен быть двусторонней формулой, а не логическим вектором. я ввожу ER case_when(...) . Обратная трассировка: запустите rlang::last_trace() , чтобы увидеть полный контекст.

Я пробовал:

 ev<-ev %>% 
  select(Receiver) %>% 
  mutate(ER=case_when(c(Receiver=="1315"|
                         Receiver=="1314"|
                         Receiver=="1321"|
                        Receiver=="1404"|
                        Receiver=="1318"|
                        Receiver=="1325"|
                        Receiver=="1313"|
                        Receiver=="1323"|
                        Receiver=="1324"|
                        Receiver=="1320"|
                        Receiver=="1319"|
                        Receiver=="1317")))
 

И:

 ev<-ev %>%   
  mutate(ER=case_when(Receiver %in% c("1326", "1315", "1314", "1321", "1404", "1318", "1325", "1313", "1323", "1324", "1320", "1319", "1317")))
 

Любая помощь, показывающая мне, где я ошибся, очень ценится.

Ответ №1:

Давайте предположим, что у вас есть два исследования, study_A и study_B . Затем вам нужно добавить заменяющие значения, например, только для двух заданных вами строк:

 ev <- ev %>%
   mutate(ER = case_when(Receiver == "1326" ~ "study_A", 
                         Receiver == "1315" ~ "study_B"))
 

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

1. Тогда я вижу, что я делаю неправильно. Спасибо. В этом случае было бы лучше просто использовать filter() для извлечения всех получателей, которые я хочу, в новый фрейм даты? Во фрейме данных нет ничего, что отличало бы получателей от разных сайтов.

2. Зависит от того, сколько отдельных фреймов данных вы хотите сгенерировать. Я предполагаю, что по одному для каждого из ваших исследований, верно? Тогда, конечно, проще просто использовать filter() для хранения данных, относящихся к конкретным получателям.