R中的分位数使用,在下分位数上限和上分位数下限之间增加0.01
我在R中有以下代码来为我的数据帧生成五分位数。然而,使用此方法生成的五分位数是- “[0.22,4.16]”“(4.16,7.15]”“(7.15,9.7]”“(9.7,19.2]”“(19.2,78.4]” 相反,我希望水平在上一个五分位数的上限和下一个五分位数的下限之间增加0.01,所以我希望它们是- “[0.22,4.16]”“(4.17,7.15]”“(7.16,9.7]”“(9.8,19.2]”“(19.3,78.4]” 任何帮助都将不胜感激R中的分位数使用,在下分位数上限和上分位数下限之间增加0.01,r,quantile,R,Quantile,我在R中有以下代码来为我的数据帧生成五分位数。然而,使用此方法生成的五分位数是- “[0.22,4.16]”“(4.16,7.15]”“(7.15,9.7]”“(9.7,19.2]”“(19.2,78.4]” 相反,我希望水平在上一个五分位数的上限和下一个五分位数的下限之间增加0.01,所以我希望它们是- “[0.22,4.16]”“(4.17,7.15]”“(7.16,9.7]”“(9.8,19.2]”“(19.3,78.4]” 任何帮助都将不胜感激 library(dplyr) librar
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))
库(dplyr)
图书馆(gtools)
mydata%
变异(值=ifelse(值==-1,NA,值),
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)
。这无法解释五分位数边界上方0.1的所有值。因此,数字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)
库(plyr)
mydata$quants谢谢你,但这不起作用:(@HM8689)如果这一切都很好,请接受这个答案。