我试图将数据集分解为基于组的分位数。
我有以下代码,如果我尝试使用seq(0,1,.5)
进行剪切,它可以正常工作但是当我更改为seq(0,1,.2)
时它会给出:
cut.default出错(x = fwd_quarts $ v,breaks = 分位数(fwd_quarts $ v,:'休息'不是唯一的
考虑到不同的代码,我无法摆脱错误。我如何调整它,以便当它扩展到更大的数据集时,将创建分位数而没有错误?
ddf <- vector(mode="numeric", length=0)
df <- vector(mode="numeric", length=0)
g<-data.frame( g= c(1,1,1,1,2,2,2,2,3,3))
v<-data.frame( v= c(1,4,4,5,NA,2,6,NA,7,8))
df<-cbind(g,v)
df<-df[complete.cases(df), ]
ddf<-ddply(df, "g", function(fwd_quarts){
eps_quartile <- cut(x = fwd_quarts$v, breaks =quantile(fwd_quarts$v, probs = seq(0, 1, 0.5)),na.rm=TRUE, labels = FALSE, include.lowest = TRUE)
cbind(ddf,eps_quartile)
})
df<-cbind(df,fwde_quart=ddf$eps_quartile)
答案 0 :(得分:1)
这与ddply无关。
如果您的数据没有生成唯一中断,您可以通过使用唯一语句包装中断来使它们成为唯一。
breaks =unique(quantile(fwd_quarts$v, probs = seq(0, 1, 0.2)))
但是,这会降低您最初所需的关卡数量。
一般来说,如果您有c(1,1,1,2)之类的数据,则无法将其分为3组。组的数量应小于或等于数据中的唯一值。 HTH。