Найти значение в> 10% записей с повторностями (R) - PullRequest
0 голосов
/ 03 июля 2018

У меня есть набор данных, в котором пациент сообщал о побочных эффектах в течение нескольких посещений. В R это выглядит так:

data = data.frame("patient" = c("P1", "P1", "P1", "P2", "P2", "P2"),
             "side.effect" = c("Headache", "Dizzy", "Headache", "Cramps", "Dizzy", "Headache"))

Я хотел бы подсчитать количество побочных эффектов, о которых сообщают> 10% пациентов, сохранить метку побочного эффекта для побочных эффектов, возникающих у> 10% пациентов, и объединить все остальное в другую категорию. В конце это будет выглядеть примерно так (но с гораздо большим количеством данных):

SideEffect  Count
Dizzy         2 
Headache      2
Other         1

У меня проблемы с вычислением, потому что есть несколько записей для одного и того же пациента. Если бы они не были повторениями, я бы использовал fct_lump из библиотеки dplyr. Прямо сейчас

Мой текущий прогресс:

data %>% 
  group_by(side) %>% 
  summarize("num.side.effect" = n_distinct(subject.ID)) %>%
  mutate("condensed.side.effects" = ifelse(num.side.effect > 50, 
          adverse.event.term, "other"))

Который не совсем делает то, что я хочу. Есть предложения?

1 Ответ

0 голосов
/ 03 июля 2018

Мы можем изменить все другие элементы, которые не удовлетворяют условию, на «Другое» и получить n_distinct от «пациента»

library(dplyr)
data %>% 
   group_by(side.effect) %>% 
   group_by(Sideeffect =  replace(as.character(side.effect),
         n()/nrow(.) < 0.2, "Other")) %>% 
   summarise(Count = n_distinct(patient))

# A tibble: 3 x 2
# Sideeffect Count
#  <chr>       <int>
#1 Dizzy           2
#2 Headache        2
#3 Other           1
...