Оператор ifelse в функции суммирования R: dplyr

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

TeleHealth_Counts %>%
  group_by(TeleHealth_Counts$`Visit Provider`) %>%
  summarize(Video_Count = ifelse(`Type` ==  "Video Visit New", NA, sum(`Visit Count`, na.rm = TRUE)))
  #summarize(Tele_Count = sum(`Visit Count`, na.rm = TRUE))

Другая проблема, с которой я столкнулся, заключается в том, что когда я назначаю этот код переменной, чтобы я мог загрузить данные, я получаю сообщение об ошибке: summarise() перегруппировка вывода с помощью 'TeleHealth_Counts $ Visit Provider' (переопределить с помощью аргумента .groups). Как мне преодолеть эту ошибку или загрузить фрейм данных, который я вижу в своей консоли?

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

physicians <- unique(TeleHealth_Counts$`Visit Provider`)
df_phys <-data.frame(physicians)

person benzinga    schedule 10.10.2020    source источник
comment
Дело .groups - это предупреждение, а не ошибка. Хотя это можно игнорировать (это не прерывает / не останавливает выполнение), безопаснее быть явным, добавив .groups= в ваше резюме, как предложено в предупреждении. Подробнее см. ?summarize. Что касается повторных провайдеров ... это может быть что угодно. Если вы разместите образцы данных, которые воспроизводят эту проблему, мы можем помочь. (См. stackoverflow.com/q/5963269, минимальный воспроизводимый пример и stackoverflow.com/tags/r/info)   -  person r2evans    schedule 10.10.2020


Ответы (1)


Type == "Video Visit New" создает вектор длины, равной количеству строк в группе, а ifelse возвращает результат той же длины, что и условие, которое мы проверяем, поэтому строки повторяются.

Попробуйте следующее:

library(dplyr)

result <- TeleHealth_Counts %>%
  group_by(`Visit Provider`) %>%
  summarize(Video_Count = if(any(`Type` ==  "Video Visit New")) NA_real_ 
                          else sum(`Visit Count`, na.rm = TRUE))

Сообщение, которое вы получаете, является предупреждением, а не ошибкой, которая можно игнорировать, поскольку это поведение по умолчанию в dplyr 1.0.0 и далее, если вы не отключите предупреждение. Чтобы создать CSV-файл для вышеуказанного фрейма данных, вы можете использовать write.csv, например:

write.csv(result, 'result.csv', row.names = FALSE)
person Ronak Shah    schedule 10.10.2020
comment
РонакШах, ты работаешь NA_real_ в своем потоке? Хотя многие (tidyverse) инструменты подойдут для этого различия, я обнаружил, что другие инструменты можно спутать с lgl столбцом, когда что-то, что я сделал, не дало ничего резюмируемого, поэтому NA никогда не подходит NA_real_. - person r2evans; 10.10.2020
comment
Я обычно использую только NA (в основном потому, что не забываю использовать NA_real_/NA_integer_), если только эта функция tidyverse не кричит. Но я думаю, что всегда лучше быть откровенным. - person Ronak Shah; 10.10.2020
comment
Даже если они не жалуются, я думаю, что это может быть в некотором смысле декларативным, декларируя то, что, по моему мнению, я должен получить от этого. Таким образом, существует потребность во многих map_* типизированных функциях списка приложений в purrr, а также vapply (базовый R). Спасибо. - person r2evans; 10.10.2020