Tengo esta tabla:
Profession Educational_level Number
Doctor Low 0
Doctor Medium 5
Doctor High 8
Nurse Low 1
Nurse Medium 8
Nurse High 3
[...]
Quiero averiguar el nivel educativo de la persona mediana y terminar con esta tabla:
Doctor High
Nurse Medium
[...]
Preguntas:
- ¿Cómo hago esto en R?
- ¿Y en Excel?
Gracias.
Respuestas
2 para la respuesta № 1Recomiendo la respuesta de @PaulHiemstra si la confianza en paquetes adicionales no es un problema para su flujo de trabajo. De lo contrario, esta es probablemente la forma más fácil de hacerlo en la base R:
df <- read.csv(text="Profession Educational_level Number
Doctor Low 0
Doctor Medium 5
Doctor High 8
Nurse Low 1
Nurse Medium 8
Nurse High 3", header=TRUE)
results <- by(df, INDICES=dat$Profession,
FUN=function(subset) with(subset, Educational_level[which.max(Number)]))
data.frame(names(results), unclass(results))
1 para la respuesta № 2
No creo que estés buscando el nivel educativo medio por profesión, sino el modo, es decir, la categoría con la frecuencia más alta. Para obtener esto, puedes usar ddply
del paquete plyr:
require(plyr)
ddply(df, .(Profession), summarise,
mode_educ = Educational_level[which.max(Number)]
dónde df
es el data.frame que contiene sus datos.
1 para la respuesta № 3
En Excel podrías usar una "fórmula matricial" como esta
=INDEX(B2:B10,MATCH(1,(A2:A10="Doctor")*(C2:C10=MEDIAN(IF(A2:A10="Doctor",C2:C10))),0))
confirmado con CTRL + MAYÚS + ENTRAR
Eso funciona para tus ejemplos pero para un genuino.mediana, si hubiera 4 médicos, por ejemplo, entonces el valor de la mediana para los médicos está a medio camino entre el segundo y el tercero, por lo tanto, posiblemente no tenga ningún valor en la lista, así que, ¿cómo sabrá qué nivel educativo asignar?