управление кадрами с использованием ddply - PullRequest
2 голосов
/ 16 марта 2019

У меня есть фрейм данных с именем output output dataframe

Я хочу сгенерировать режим (наиболее повторяющийся) code для каждого отдельного patientID и число уникальных patientIDс указанным выше code для каждого отдельного zipcode.

Я пробовал это:

ddply(output,~zipcode,summarize,max=mode(code))

этот код будет генерировать режим code для каждого отдельного zipcode ...но я хочу создать режим code для отдельных patientID в пределах отдельных zipcode.

output=data.frame(code=c("E78.5","N08","E78.5","I65.29","Z68.29","D64.9"),patientID=c("34423","34423","34423","34423","34424","34425"),zipcode=c(00718,00718,00718,00718,00718,00719),city=c("NAGUABO","NAGUABO","NAGUABO","NAGUABO","NAGUABO","NAGUABO"))

my output=
zipcode most_rep_code patient_count
1     718         E78.5             1
2     719         D64.9             1

1 Ответ

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

Если я правильно понимаю, что вам нужно найти code с самой высокой частотой по patientID и zipcode, тогда dplyr может быть полезным.Я думаю, что вам нужно просто указать 3 вышеупомянутых столбца в качестве переменных группы, а затем summarise, чтобы получить счетчик каждой группы.Самым высоким в каждом ряду является режим.В новом столбце указано количество режимов.

# Your reprex data
output=data.frame(code=c("E78.5","N08","E78.5","I65.29","Z68.29","D64.9"),patientID=c("34423","34423","34423","34423","34424","34425"),zipcode=c(00718,00718,00718,00718,00718,00719),city=c("NAGUABO","NAGUABO","NAGUABO","NAGUABO","NAGUABO","NAGUABO")) 

library(dplyr)
output %>% 
  dplyr::group_by(patientID, code, zipcode) %>% 
  dplyr::summarise(mode_freq = n())

# A tibble: 5 x 4
# Groups:   patientID, code [5]
  patientID code   zipcode  freq
<fct>     <fct>    <dbl> <int>
1 34423     E78.5      718     2
2 34423     I65.29     718     1
3 34423     N08        718     1
4 34424     Z68.29     718     1
5 34425     D64.9      719     1

Я включил dplyr::, потому что я предполагаю, что у вас загружено plyr и поэтому имена функций будут конфликтовать.

Обновление:

Чтобы получить предлагаемый вывод режима, по определению это должна быть самая высокая частота:

output %>% 
  group_by(patientID, code, zipcode) %>% 
  summarise(mode_freq = n()) %>%
  ungroup() %>% 
  group_by(zipcode) %>% 
  filter(mode_freq == max(mode_freq))

# A tibble: 2 x 4
# Groups:   zipcode [2]
  patientID code  zipcode mode_freq
<fct>     <fct>   <dbl>     <int>
1 34423     E78.5     718         2
2 34425     D64.9     719         1
...