如何为前四分位数(或其他分位数)中的值创建虚拟变量

时间:2018-10-16 02:35:39

标签: r dplyr

这里有一个简单的R问题,有点类似于this one,但我不知道如何从那里适应我的见识。

我有一个数据框,该数据框具有来自多家公司的相对质量排名,例如

Firm    Quality
  A        4
  B        5
  C        2
  D        0

我想添加第三列,如果质量等于或高于第50个百分数(否则为0),第四列为1,如果质量等于或高于第75个百分数(否则为0)。类似于上面链接的解决方案,似乎依赖于cut()within();尽管它们是相对较旧的,但在dplyr之前,并且我想知道是否存在使用summarise()和dplyr摘要函数的更好方法,以便以更直观的方式进行此操作(至少对于新手而言)。

2 个答案:

答案 0 :(得分:3)

您可以做类似的事情

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

答案 1 :(得分:1)

Ronak的回答非常好,但是仅仅为了好玩,一个完整的dplyr解决方案:

library(dplyr)
df %>%
  mutate(Above50 = as.numeric(ntile(Quality, 2)==2), 
         Above75 = as.numeric(ntile(Quality, 4)==4))