Расчет средних значений для пациента с использованием n_distinct с условием

<> - стандартный SQL-92; != является его эквивалентом. Оба оценивают значения, которые NULL не являются - NULL являются заполнитель, чтобы сказать, что существует отсутствие значения.

Именно поэтому вы можете использовать IS NULL / IS NOT NULL как предикаты для таких ситуаций.

Это поведение не относится к SQL Server. Все диалоги SQL, соответствующие стандарту, работают одинаково.

Примечание. Для сравнения, если ваше значение не является нулевым, вы используете IS NOT NULL, а для сравнения с ненулевым значением вы используете <> 'YOUR_VALUE'. Я не могу сказать, равна ли моя ценность равным NULL, но я могу сказать, имеет ли значение NULL или NOT NULL. Я могу сравнить, если моя ценность - это нечто иное, чем NULL.

0
задан Yvonne 4 March 2019 в 17:35
поделиться

1 ответ

Давайте создадим некоторые игрушечные данные. Четыре лечения с разными вероятностями. 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
0
ответ дан atomman 4 March 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: