sirven - ¿Cómo crear una columna con un cuartil?
quintiles y cuartiles (5)
Esto debería hacerlo:
tableOne <- within(tableOne, quartile <- as.integer(cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE)))
...Algunos detalles:
La función within
es ideal para calcular nuevas columnas. No tiene que referirse a las columnas como tableOne$salesPrice
etc.
tableOne <- within(tableOne, quartile <- <<<some expression>>>)
La función de quantile
calcula los cuantiles (o, en su caso, los cuartiles). 0:4/4
evalúa a c(0, 0.25, 0.50, 0.75, 1)
.
Finalmente, la función de cut
divide sus datos en esos cuartiles. Pero obtienes un factor
con nombres extraños, por lo que a as.integer
lo as.integer
en grupos 1,2,3,4
.
Intente ?within
etc. para aprender más sobre las funciones mencionadas aquí ...
Tengo una tabla llamada tableOne en R como esta:
idNum binaryVariable salePrice
2 1 55.56
4 0 88.33
15 0 4.45
87 1 35.77
... ... ...
Me gustaría tomar los valores producidos a partir de: summary (tableOne $ salePrice) para crear cuatro cuartiles por salePrice. Luego me gustaría crear una columna tableOne $ quartile con el cuartil en el que se encuentra cada fila salePrice. Se vería así:
idNum binaryVariable salePrice quartile
2 1 55.56 3
4 0 88.33 4
15 0 4.45 1
87 1 35.77 2
... ... ... ...
¿Alguna sugerencia?
La configuración de las labels=FALSE
parámetros labels=FALSE
en cut()
devuelve los nombres de categoría como enteros. Ver ?cut
tableOne <- within(tableOne, quartile <- cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE, labels=FALSE))
Puedes usar el siguiente script
tableOne$Quartile<-ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(0.25)),1,
ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(0.5)),2,
ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(0.75)),3,
ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(1)),4,NA))))
Un enfoque de datos.
library(data.table)
tableOne <- setDT(tableOne)[, quartile := cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE, labels=FALSE)]
Usando el paquete cutr
podemos hacer:
# devtools::install_github("moodymudskipper/cutr") library(cutr) df$quartile <- smart_cut(df$salePrice, 4, "g", output = "numeric") # idNum binaryVariable salePrice quartile # 1 2 1 55.56 3 # 2 4 0 88.33 4 # 3 15 0 4.45 1 # 4 87 1 35.77 2