Eu tenho um conjunto de dados como segue
data<- data.frame(group_ID= c("cred", "cred", "cred", "cyellow", "cyellow", "cgreen"),
Start =c("2024-06-27,10:31:34", "2024-06-27,10:42:26", "2024-06-27,12:33:00", "2024-06-27,12:34:00","2024-06-27,12:54:00","2024-06-28,14:58:51"),
End = c("2024-06-27,11:31:34","2024-06-27,11:42:26","2024-06-27,13:33:00", "2024-06-27,13:34:00","2024-06-27,13:54:00","2024-06-28,15:54:14"),
priorityrank=c(1, 2, 2, 2, 3, 3),
goaltokeep = c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE))
Onde cada linha representa uma observação de um grupo para uma determinada janela de tempo. Às vezes, várias pessoas observam o mesmo grupo ao mesmo tempo, então atribuímos uma "classificação de prioridade" onde números menores são a observação preferida, com 1 sendo a mais preferida e 3 sendo a menos preferida. Às vezes, grupos diferentes são observados ao mesmo tempo e isso não importa.
Quero manter a linha com o menor valor numérico "priorityrank" para um determinado grupo quando mais de uma janela de tempo de observação se sobrepõe. Com os dados de exemplo, a coluna "meta a manter" mostra as linhas que devem ser mantidas (VERDADEIRO) no conjunto de dados final.
Comecei tentando avaliar a sobreposição de diferentes linhas por número de ID . No entanto, quando executo os dados de exemplo (meus ou fornecidos pelo comentarista) usando o código sugerido por Alex (não faz login há mais de 3 anos, então não posso perguntar), recebo o seguinte erro.
Error in eval_tidy(args[[j]], mask) :
no function to return from, jumping to top level
Esta questão de SQL chega perto , mas não sei nada sobre SQL ou como fazer comparações em R.
Agradeço desde já a sua contribuição e ajuda! Estou com dificuldades com isso há algum tempo.
ATUALIZAR:
Muito obrigado a todos! Estou tendo um erro inesperado em cerca de 60 dos 1.000 casos com ambas as soluções possíveis quando uso o dataframe maior. Mesmo quando classifico meu dataframe por hora de início, esses erros persistem.
Isolei uma dessas instâncias que gera o erro, e aqui está reproduzida abaixo como um exemplo para trabalhar. Não tenho certeza do que está errado, já que o início vem antes do fim para qualquer linha.
dataerr<- data.frame(group_ID= c("cred", "cred", "cred"),
Start =c("2024-06-27,12:33:00","2024-06-27,13:26:57","2024-06-27,13:33:36"),
End = c("2024-06-27,13:33:00","2024-06-27,13:48:49","2024-06-27,13:49:42"),
priorityrank=c(2, 3, 2),
goaltokeep = c(TRUE, FALSE, TRUE))
Aqui estão os erros de cada solução. Não sei como interpretá-los, mesmo depois de pesquisar um pouco online, pois os começos parecem vir antes dos fins. Talvez seja algo entrelinhas?
Solução do erro de Friede:
Error in `iv()`:
! `start` must be less than `end`.
ℹ `start` is not less than `end` at locations: `2`.
Solução para o erro r2evans:
Error in `[[<-.data.frame`(`*tmp*`, col, value = c("cred", "cred", "cred", :
replacement has 6 rows, data has 3