Расчет средних значений для пациента с использованием n_distinct с условием - PullRequest
0 голосов
/ 04 марта 2019

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

Я использовал следующий код для расчета использования здравоохранения:

Df %>%
   group_by(A) %>%
   summarize(n = n()) %>%
   mutate(rel.freq = (n/sum(n))*100) %>%
   mutate(avg.A.pt = n/sum(n_distinct(Person[A == A])))   

У меня проблема с последней строкой кода.Мне нужно рассчитать количество действий на пациента для одного конкретного вида помощи, рассчитанное как общее количество активности n, деленное на уникальное количество пациентов n_distinct(Person), но только деленное на пациентов, которые получили этот конкретный типуход Person[HCU == HCU].

Результаты, к которым я стремлюсь, будут выглядеть так:

*HCU    n     rel.freq     avg.hcu.pt*
ECG   486      10%          4.0
Echo  301      8%           1.8

Не могли бы вы помочь мне исправить код?

Заранее спасибо!


После ответа, некоторая дополнительная информация:

Я работаю с удаленным доступом в защищенной среде, поэтому, к сожалению, я не могу предоставить вам образцы данных.У меня есть набор данных приблизительно из 20 000 пациентов, которые получили 11 000 000 медицинских мероприятий (строки) и 34 столбца, например, специализация, медицинский центр, возраст и личный код.Для моей статьи я хотел бы показать: - процент (уникальных) пациентов, которые хотя бы раз получали определенную медицинскую деятельность (я назвал это относительной частотой) - среднее количество медицинских действий (определенного типа) на (уникальную)) пациент

В основном я наметил виды медицинской помощи, например, лабораторный тест с использованием group_by и фильтра dplyr, это дало мне общее количество лабораторных тестов.Но теперь я хочу уточнить, например, у скольких пациентов была хотя бы одна МРТ, у скольких никогда не было МРТ, сколько МРТ (в среднем) получали пациенты.

Я попробовал ваше предложение

Df %>%
Group_by(A, Person) %>%
Summarise(n = n())

# A= healthcare activities

Что дает мне:

A            Person         n
MRI        1                 6
MRI        2                 2
… for all >1000 patients who received MRI
Echo      1                 3
And so on

Как получить% пациентов с МРТ?А среднее количество МРТ на пациента?

1 Ответ

0 голосов
/ 05 марта 2019

Позволяет создать некоторые игрушечные данные.Четыре лечения с разными вероятностями.100 пациентов посещают 1000 раз.

set.seed(123)
df<-data.frame(A = sample(c("MRI", "ECG", "Echo", "PET"), 1000,
                          prob=c(0.05, 0.8, 0.13, 0.02), replace=TRUE),
               p = sample(1:100, 1000, replace=TRUE))

Теперь мы агрегируем данные

    df %>% 
  # group by Treatment and patients
  group_by(A, p) %>% 
  # first summary is the number of a specific treatments for each patient
  summarise(n = n()) %>% 
  # next summary we sum the number distinct patients in the group
  # and divide by sum the number of distinct patients to get the rel.freq of the treatment.
  # Then we take the mean value of the number of treatment pr. patient 
  summarise(rel.freq   = n_distinct(p)/n_distinct(df$p),
            avg.hcu.pt = mean(n))

Результат

# A tibble: 4 x 3
A     rel.freq avg.hcu.pt
<fct>    <dbl>      <dbl>
1 ECG       1          8.02
2 Echo      0.76       1.72
3 MRI       0.37       1.30
4 PET       0.17       1.12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...