Pregunta simple de R aquí, y un poco similar a este pero no pude encontrar la manera de adaptar las ideas de allí a mi entorno.

Tengo un marco de datos con clasificaciones de calidad relativa de varias empresas, p. Ej.

Firm    Quality
  A        4
  B        5
  C        2
  D        0

Quiero agregar una tercera columna que es 1 si la calidad está en o por encima del percentil 50 (y 0 en caso contrario), y una cuarta columna que es 1 si la calidad está en o por encima del percentil 75 (y 0 en caso contrario). Soluciones como la vinculada anteriormente parecen depender de cut() y within(); sin embargo, son relativamente antiguos, pre-dplyr, y me pregunto si hay una buena manera de usar summarise() y las funciones de resumen de dplyr para hacer esto de una manera más intuitiva (al menos para este novato).

0
herfa 16 oct. 2018 a las 05:35

2 respuestas

La mejor respuesta

La respuesta de Ronak está perfectamente bien, pero solo por el gusto de hacerlo, una solución completamente dplyr:

library(dplyr)
df %>%
  mutate(Above50 = as.numeric(ntile(Quality, 2)==2), 
         Above75 = as.numeric(ntile(Quality, 4)==4))
1
iod 16 oct. 2018 a las 03:45

Podrías hacer algo como

library(dplyr)
df %>%
  mutate(Above50 = as.numeric(Quality >= quantile(Quality, 0.5)), 
         Above75 = as.numeric(Quality >= quantile(Quality, 0.75)))


#  Firm Quality Above50 Above75
#1    A       4       1       0
#2    B       5       1       1
#3    C       2       0       0
#4    D       0       0       0
3
Ronak Shah 16 oct. 2018 a las 02:38