Функция R помогает получить только уникальные значения, чтобы затем получить базовые c метрики - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь получить уникальные значения для Number.Full ниже. n_distinct() приносит мне отчетливый счет Number.Full. Но это не учитывает это в счетах min() / max() / mean().

Я пытался поместить отличительный и уникальный как часть filter() и поместить его после filter() как новая переменная. Но я не могу заставить его работать правильно.

Любая помощь или предложения приветствуются.

Редактирование 1 для данных dput:

nRequests_byYearMth <- df_Raw_Data %>%

  filter(Specimen.Number.Left.2 == "AB") %>%

  group_by(Rec_Period_Month_Yr) %>%

  summarise(Number.Full = n_distinct(Number.Full), min(TaT_Coll_to_Auth), max(TaT_Coll_to_Auth), mean(TaT_Coll_to_Auth)) %>%

  arrange(Rec_Period_Month_Yr)


structure(list(Receive.Date = c("2019-09-20", "2019-09-20", "2019-06-24", 
"2019-05-23", "2019-09-05", "2019-07-30"), Number.Full = c("04023119", 
"04023119", "02634719", "02190819", "00273419", 
"03234219"), Ex.No = c("", "", "19P08645QQ5", 
"", "", ""), Order.Comment = c("CT11", "CT11", "HR", "SHU", 
"", "ICCZZ"), Coll.Date.Source = c("1931-02-04", "1931-02-04", 
"1949-01-04", "2000-12-23", "2012-09-05", "2015-05-02"), Location.Code = c("FH7895SS", 
"FHSA785", "VB97S", "RV0158", "FH29567", "N1"), Loc.Des = c("FWC", 
"FU", "VHB", "RDO", 
"F29", "NSBRU"), Tissue.Code = c("LEX", 
"LEX", "RC", "SKL", "NPL", "RC"), T.Name = c("ELung", 
"ELung", "Referred", "Skin", "Pleural", 
"Referred Case"), Current.Status = c("S", "S", "S", "S", 
"S", "S"), Date.Updated = c("2019-10-20", "2019-10-20", 
"2019-06-24", "2019-05-28", "2019-09-13", "2019-08-07"), Reporting.1 = c("LYNN", 
"LYNN", "ROBCM", "HUSA", "SPOE", "CPATH"), Reporting.2 = c("MAJJ", 
"MAJJ", "", "", "ROBB", ""), Reporting.3 = c("", 
"", "", "", "FERB", ""), Reporting.4 = c("", "", 
"", "", "", ""), Reporting.5 = c("", "", "", "", 
"", ""), Number.Left.2 = c("AB", "AB", "AB", "AB", "CN", 
"AB"), Auth_Period_Month_Yr = c("2019-10", "2019-10", "2019-06", 
"2019-05", "2019-09", "2019-08"), Rec_Period_Month_Yr = c("2019-09", 
"2019-09", "2019-06", "2019-05", "2019-09", "2019-07"), TaT_Coll_to_Auth = structure(c(32400, 
32400, 25738, 6730, 2564, 1558), class = "difftime", units = "days"), 
    M.Weighting = c(50L, 50L, 0L, 30L, NA, 0L)), row.names = c(NA, 
6L), class = "data.frame")

Из формулы nRequests_byYearMth я ожидал, что filter() покажет только записи AB, затем сгруппирует их по Rec_Period_Moth_Yr, когда наступило летнее время, я подсчитал различные записи (n_distinct()), а затем min() / max() / mean() также покажет данные, относящиеся к отфильтрованным результатам. Но когда я использовал Excel, чтобы посмотреть на извлечение данных, я использую его, кажется, не фильтрует правильно. Я думаю, что мне нужно каким-то образом применить фильтр к summerise().

Редактировать с выводами: В результате получается:

structure(list(Rec_Period_Month_Yr = c("2019-04", "2019-05", 
"2019-06", "2019-07", "2019-08", "2019-09", "2019-10", "2019-11", 
"2019-12", "2020-01", "2020-02", "2020-03"), Specimen.Number.Full = c(4881L, 
4929L, 4902L, 5289L, 4815L, 5043L, 5697L, 5051L, 4552L, 5434L, 
4917L, 4556L), `min(TaT_Coll_to_Auth)` = structure(c(0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0), class = "difftime", units = "days"), 
    `max(TaT_Coll_to_Auth)` = structure(c(368, 6730, 25738, 1558, 
    222, 32400, 374, 150, 320, 97, 382, 60), class = "difftime", units = "days"), 
    `mean(TaT_Coll_to_Auth)` = structure(c(9.80235422940049, 
    10.768904109589, 14.8278848840458, 10.0686706074708, 10.2533425223983, 
    19.6828624240824, 11.8121527777778, 10.4033579583613, 10.4007004231723, 
    9.04840344652813, 8.94940393678958, 8.2197571578474), class = "difftime", units = "days")), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"))

Ожидаемый вывод, который я хочу, ниже. Но я могу создать это только в том случае, если я только смотрю на записи AB, и Summarise(), кажется, не делает этого для min()/max()/mean(), а вместо этого просматривает все значения для столбца. Мне нужно, чтобы он смотрел только на записи, относящиеся к AB filter() (для всех суммированных элементов.) (Последняя максимальная запись показывает как 60 в R, но при правильной фильтрации будет отображаться как 50)

structure(list(Year.and.Mth = c("2019-4", "2019-5", "2019-6", 
"2019-7", "2019-8", "2019-9", "2019-10", "2019-11", "2019-12", 
"2020-1", "2020-2", "2020-3"), Number.Full = c(4881, 4929, 4902, 
5289, 4815, 5043, 5697, 5051, 4552, 5434, 4917, 4556), Max = c(113, 
6730, 25738, 1558, 156, 32400, 374, 109, 320, 97, 382, 50), Mean = c(7.97705388240115, 
9.34286873605194, 13.514891880865, 8.39194554736245, 7.72294911734164, 
15.2502478683323, 9.15850447604002, 8.85389031874876, 9.00021968365554, 
7.76573426573427, 7.97335773845841, 7.350526778)), class = "data.frame", row.names = c(NA, 
-12L))
...