У меня есть фрейм данных с именем output выходной фрейм данных
Я хочу сгенерировать режим (наиболее повторяющийся) 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@nycrefugee:пожалуйста, попробуйте это 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("НАГУАБО","НАГУАБО","НАГУАБО","НАГУАБО","НАГУАБО","НАГУАБО"))





Если я правильно понял, что вам нужно найти 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
я действительно ценю ваши усилия, но это не тот ответ, который я ищу, я отредактировал свой вопрос и включил раздел вывода, пожалуйста, просмотрите его, ожидая вашего ответа
Я обновлю, но я думаю, что в вашем (новом) предложенном выводе количество пациентов в строке 1 должно быть 2.
Только № 1, потому что я ищу количество различных идентификаторов пациентов с кодом E78.5.
пожалуйста, включите воспроизводимый образец данных, а не снимок экрана.