Aqui está um conjunto de dados onde ANO é uma variável de agrupamento.
dat <- data.frame(YEAR = c(rep(1999,4),rep(2002,3)), VALUE = c(1,2,3,2,1,2,3))
Gostaria de adicionar uma coluna que analisa a coluna VALUE e diz "onde, dentro do ano, esse valor fica?" Estou com dificuldade para expressar isso de forma concisa, mas é praticamente o que cume_dist faz, exceto que cume_dist agrupa valores vinculados e eu os quero separados. cume_dist pega 1,2,2,3 e retorna 0,25, 0,75, 0,75, 1,00 e preciso que os vínculos sejam separados: 1,2,2,4 deve retornar 0,25, 0,50, 0,75, 1,0.
Aqui está uma linha baseada em cume_dist que funciona, exceto para os valores empatados:
dat %>% group_by(YEAR) %>% mutate(cumdist = cume_dist(VALUE))
Tentei desconstruir cume_dist (que é a classificação no grupo dividida pelo tamanho do grupo) e usar row_number, que separa empates, para o numerador e dividi-lo pelo número de linhas em cada ano. Isso me dá o numerador correto:
dat %>% group_by(YEAR) %>% mutate(rownumber = row_number(VALUE))
Mas como faço para dividir essas classificações pelo número de valores em cada ano (ou seja, dividir todas as classificações de 1999 por 4 e as classificações de 2002 por 3)?
É isso que você procura?
o que dá
Usando
frank()
emdata.table
Ou método base, já mencionado nos comentários .