Если я правильно понимаю, что вам нужно найти 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