Problema
Queremos calcular el porcentaje del total de la columna de un data frame en R. En nuestro ejemplo una columna con: 7/397, 23/397 y así sucesivamente.
x freq
1 Jan 7
2 Feb 23
3 Mar 86
4 Apr 281
Código para crear el data frame anterior:
df <- read.table(text = "x freq
Jan 7
Feb 23
Mar 86
Apr 281",
header =TRUE)
Solución
Empleamos la función prop.table para crear esa columna.
df$prob <- prop.table(df$freq)
# En porcentajes con dos decimales:
df$prob <- round(prop.table(df$freq), 4)*100
x freq prob
1 Jan 7 0.01763224
2 Feb 23 0.05793451
3 Mar 86 0.21662469
4 Apr 281 0.70780856
Si deseamos el porcentaje de un mes específico:
prop.table(df$freq)[df$x == "Feb"]
[1] 0.05793451
Alternativas
- Paquete base
df$prob <- df$freq/sum(df$freq)
library(dplyr)
df %>% mutate(prob = prop.table(freq))
# O también
df %>% mutate(prob = freq / sum(freq))
Un mes específico:
df %>% filter(x == "Feb")
x freq prob
1 Feb 23 0.05793451
Referencias
No hay comentarios:
Publicar un comentario