使用cut和ddply时,不会出现唯一的错误

时间:2016-01-08 15:37:47

标签: r plyr cut

我试图将数据集分解为基于组的分位数。

我有以下代码,如果我尝试使用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)

1 个答案:

答案 0 :(得分:1)

这与ddply无关。

如果您的数据没有生成唯一中断,您可以通过使用唯一语句包装中断来使它们成为唯一。

breaks =unique(quantile(fwd_quarts$v, probs = seq(0, 1, 0.2)))

但是,这会降低您最初所需的关卡数量。

一般来说,如果您有c(1,1,1,2)之类的数据,则无法将其分为3组。组的数量应小于或等于数据中的唯一值。 HTH。