R:为数值变量创建不均匀的因子级别
我有一组从-0.20到+0.15的值(100000个条目),它们是返回百分比 大部分数值介于+3.5%和-3.5%之间 我希望将其转化为一个系数,以便:R:为数值变量创建不均匀的因子级别,r,quantile,R,Quantile,我有一组从-0.20到+0.15的值(100000个条目),它们是返回百分比 大部分数值介于+3.5%和-3.5%之间 我希望将其转化为一个系数,以便: 任何介于-0.035到+0.035之间的收益均以0.05的增量进行等分,并且 任何介于-0.2到-0.035之间的值都作为一个因子和 0.05到0.15之间的任何值都作为一个因子变量进行分类 关于我如何在R中实现这一点,有什么想法吗?我确实尝试了剪切,但它似乎只是以相等的增量进行存储。因此我生成了保存值的向量(不均匀分布) 库(data.t
- 任何介于-0.035到+0.035之间的收益均以0.05的增量进行等分,并且
- 任何介于-0.2到-0.035之间的值都作为一个因子和
- 0.05到0.15之间的任何值都作为一个因子变量进行分类
关于我如何在R中实现这一点,有什么想法吗?我确实尝试了
剪切,但它似乎只是以相等的增量进行存储。因此我生成了保存值的向量(不均匀分布)
库(data.table)
设定种子(555)#以便重复
N如果您?cut
,则breaks=
参数允许您定义自定义断点…因此可能cut(stuff,breaks=c(-0.2,-0.035,seq(-0.03,0.035,by=0.005),0.05,0.15))
?
library(data.table)
set.seed(555)#in order to be reproducible
N <- 100000#number of pseudonumbers to be generated
min1=-0.035#arbitrary limits
max1=0.035#idem
samp <- runif(N,min = -0.2,max = 0.15)#create the vector
level1 <- as.factor(ifelse(samp<=min1,paste0("(",min(samp),",",min1,"]"),NA))#create the first level
level2 <- as.factor(ifelse(samp>=max1,paste0("[",max1,",",max(samp),")"),NA))#create the second level
incr <- 0.005
level3 <- cut(samp,seq(min1, max1, by = incr))#create the intermediate levels
dt <- data.table(samp,level1,level2,level3)#put all together
mylevels <- na.omit(unlist(matrix(t(dt[,-1]))))#the vector that contains in which range the samp belongs to
mylevels<-factor(mylevels,levels= unique(mylevels))
dt2<-dt[,.(samp,levels=mylevels)]
samp levels
1: -0.07023653 (-0.199996188434307,-0.035]
2: 0.10889991 [0.035,0.149995080730878)
3: 0.04246077 [0.035,0.149995080730878)
4: -0.01193010 (-0.015,-0.01]
5: 0.02607736 (0.025,0.03]
---
99996: -0.04786692 (-0.199996188434307,-0.035]
99997: -0.08700210 (-0.199996188434307,-0.035]
99998: 0.09989973 [0.035,0.149995080730878)
99999: 0.10095336 [0.035,0.149995080730878)
100000: -0.05555869 (-0.199996188434307,-0.035]