Как мне установить подгруппу данных о пациенте на основе количества показаний для конкретной переменной для каждого пациента? - PullRequest
0 голосов
/ 02 февраля 2020

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

Я бы хотел попытаться исключить пациента 1 и пациента 4 из моего подмножества, поскольку у них есть только одно значение «Показатель мобильности». До сих пор я не смог выработать способ подсчета количества показаний по каждой переменной для каждого пациента. Если у пациента только одно или ноль показаний, я бы хотел исключить их из подмножества.

Это imgur ссылка на пример данных. Я не могу загрузить реальные данные, но это похоже на

1006 *enter image description here

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Это можно сделать с помощью dplyr и group_by. Для получения дополнительной информации см. ?group_by и ?summarize

# Create random data
dta <- data.frame(patient = rep(c(1,2),4), MobiScor = runif(8, 0,20))
    dta$MobiScor[sample(1:8,3)] <- NA

# Count all avaiable Mobility scores per patient and leave original format   
library(dplyr)
dta %>% group_by(patient) %>% mutate(count = sum(!is.na(MobiScor)))
# Merge and create pivot table
  dta %>% group_by(patient) %>% summarize(count = sum(!is.na(MobiScor)))

Пример данных

  patient  MobiScor
1       1 19.203898
2       2 13.684209
3       1 17.581468
4       2        NA
5       1        NA
6       2        NA
7       1  7.794959
8       2        NA

Result (mutate) 1)

 patient MobiScor count
    <dbl>    <dbl> <int>
1       1    19.2      3
2       2    13.7      1
3       1    17.6      3
4       2    NA        1
5       1    NA        3
6       2    NA        1
7       1     7.79     3
8       2    NA        1

Result (суммировать) 2)

  patient count
    <dbl> <int>
1       1     3
2       2     1
0 голосов
/ 02 февраля 2020

Вы можете посчитать количество не-NA в каждой группе, а затем отфильтровать на основе этого.

Это можно сделать в базе R:

subset(df, ave(!is.na(Mobility_score), patient, FUN = sum) > 1)

Используя dplyr

library(dplyr)
df %>% group_by(patient) %>% filter(sum(!is.na(Mobility_score)) > 1)

и data.table

library(data.table)
setDT(df)[, .SD[sum(!is.na(Mobility_score)) > 1], patient]
...