R中的分位数使用在下部分位数的下限和下限的上限之间增加0.01

  • 本文关键字:之间 增加 下部 r quantile
  • 更新时间 :
  • 英文 :


我在R中具有以下代码,以生成我的数据框架的五分位数。但是,使用此五分之一生成的五分之一是 - " [0.22,4.16]"(4.16,7.15]"(7.15,9.7]""(9.7,19.2]

相反,我希望等级在上一个五分之一的上限和下一个五分之一的下限之间增加0.01。所以我希望他们成为 - " [0.22,4.16]"(4.17,7.15]"(7.16,9.7]""(9.8,19.2]

任何帮助都将不胜感激

library(dplyr)
library(gtools)
mydata <-mydata%>%
mutate(Value = ifelse(Value == -1,NA,Value),
Value = quantcut(Value, q=seq(0,1,by=0.2), na.rm=TRUE))

quantcut()为您提供[0.22, 4.16](4.16,7.15](7.15,9.7](9.7,19.2](19.2,78.4]所有范围内的所有可能值都被这种将间隔切成五分位数的方式所涵盖。

您想要:[0.22, 4.16](4.17,7.15](7.16,9.7](9.71,19.2](19.21,78.4]。这无法说明所有值高于五分位边界的值。像这样,数字4.17不会属于第一个间隔,并且由于所有间隔都在左侧边框上,也从第二个间隔中排除。同样适用于7.16、9.71和19.21。

话虽如此,我们假设您有一个非常有力的理由来证明自己的选择是合理的。

您必须首先将旧值调整为新值,然后将旧值更改为新值。如果为此使用plyr软件包中的mapvalues()

library(plyr)
mydata$quants <- quantcut(mydata$Value, q = seq(0, 1, by=0.2), na.rm=TRUE)
# Step 1: Adapt old values to new values with regular expressions:
old_vals <- levels(mydata$quants)[-1]
regs <- gregexpr("(?<=\()(.*)(?=,)", levels(mydata$quants), perl=TRUE)
repl <- as.numeric(regmatches(levels(mydata$quants), regs))[-1] + 0.1
new_vals <- mapply(gsub, replacement=repl, x=old_vals, 
              MoreArgs = list(pattern = "(?<=\()(.*)(?=,)", perl=TRUE))
# Step 2:
mydata$quants <- mapvalues(mydata$quants, from=old_vals, to=new_vals)

最新更新