varias superponer studio lineas graficos graficas r math sum duplicates rank

studio - superponer graficas en r



R: calcular la suma de rango automáticamente (3)

Dado x <- cbind(c(10,15,20,20,25,30,30,30,35,40,40,40,40,45),rep(c(''M'',''F''),7)) , quiero calcular las sumas de rango de las categorías M y F automáticamente , sin hacerlo a mano. Lo que no pude entender es cómo ajustar los números de rango cuando hay un empate. En este caso, los números 3 y 4 son ambos 20 y comparten el valor de rango de 3.5 (en lugar de 3 y 4). Del mismo modo, # 6 ~ # 8 tienen el valor de rango de 7, y # 10 ~ # 13 tienen 11.5. Sin este ajuste, las sumas serían incorrectas.

#Wrong

sum(which(x[,2]==''F'')) # =56

sum(which(x[,2]==''M'')) # =49

#Right

sum(1,3.5,5,7,9,11.5,11.5) # =56.5

sum(2,3.5,7,7,11.5,11.5,14) # =48.5

Probé table() y duplicated() , pero no pude entender cómo juntar cosas. ¿Algunas ideas?

EDITAR: Mi agradecimiento a konvas por sugerir rank() , que funciona además de la solución de bgoldst.


Base R , puedes usar ave :

setNames(unique(ave(rank(x[,1]), x[,2], FUN=sum)), unique(x[,2])) # M F # 48.5 56.5


Con dplyr

library(dplyr) x <- cbind(c(10,15,20,20,25,30,30,30,35,40,40,40,40,45),rep(c(''M'',''F''),7)) data.frame(x) %>% mutate(rank=rank(X1)) %>% group_by(X2) %>% summarise(sum(rank))


Puede sum() el rank() con aggregate() :

x <- data.frame(age=c(10,15,20,20,25,30,30,30,35,40,40,40,40,45),sex=rep(c(''M'',''F''),7)); aggregate(rank(age)~sex, x, sum ); ## sex rank(age) ## 1 F 56.5 ## 2 M 48.5