R: Поиск нескольких столбцов для факторов - PullRequest
0 голосов
/ 30 апреля 2018

У меня большой массив данных с несколькими столбцами (около 150).
Существует ряд столбцов (Dx1, Dx2 ... до Dx30), которые являются кодами диагностики (коды являются числами, но они являются категориальными переменными, которые соответствуют медицинскому диагнозу с использованием системы кодирования ICD-9).

У меня есть рабочий код для поиска в одном столбце, но мне нужно выполнить поиск во всех 30 столбцах, чтобы увидеть, содержит ли какой-либо из столбцов код в указанном диапазоне (DXrange).

Базовый датафрейм выглядит так:

Case  DX1   DX2   DX3  DX4...DX30
1     123   345   567  99    12
2     234   345   NA   NA    NA
3     456   567   789  345   34

Вот рабочий код:

## Defines a range of codes to search for    
DXrange <- factor(41000:41091, levels = levels(core$DX1)) 

## Search for the DXrange codes in column DX1.  

core$IndexEvent <- core$DX1 %in% DXrange & substr(core$DX1, 5, 5) != 2

## What is the frequency of the IndexEvent?
    cat("Frequency of IndexEvent : \n"); table(core$IndexEvent)

Рабочий код адаптирован из "Расчет различий в общенациональной базе данных прав доступа (NRD), отчет № 2017-01"

Я мог бы запустить это для каждого столбца DX и затем суммировать их для итогового итога IndexEvent, но это не очень эффективно.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Мы могли бы использовать filter_at с any_vars

df %>% 
  filter_at(vars(matches("DX\\d+")), any_vars(. %in% DXrange))

, где

DXrange <- 41000:41091
0 голосов
/ 30 апреля 2018

Я бы сначала нормализовал свои данные, прежде чем искать в кодах, например в следующем примере:

set.seed(314)

df <- data.frame(id = 1:5,
                 DX1 = sample(1:10,5),
                 DX2 = sample(1:10,5),
                 DX3 = sample(1:10,5))

require(dplyr)
require(tidyr)

df %>% 
  gather(key,value,-id) %>%
  filter(value %in% 1:2)

или только с базой R

df.long <- do.call(rbind,lapply(df[,2:4],function(x) data.frame(id = df$id, DX = x)))

df.long[df.long$DX %in% 1:2, ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...