【问题标题】:Breaks not unique error when using cut and ddply使用 cut 和 ddply 时打破非唯一错误
【发布时间】:2016-01-08 15:37:46
【问题描述】:

我正在尝试根据组将数据集分解为分位数。

我有以下代码,如果我尝试使用 seq(0,1,.5) 进行剪切,它可以正常工作,但是当我更改为 seq(0,1,.2) 时,它会给出:

cut.default 中的错误(x = fwd_quarts$v,breaks = 分位数(fwd_quarts$v, : 'breaks' 不是唯一的

尝试不同的代码,我无法摆脱错误。我该如何调整它,以便当它扩展到更大的数据集时,将创建分位数而不会出现错误?

 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)

【问题讨论】:

    标签: r plyr cut


    【解决方案1】:

    这与ddply无关。

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

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

    但是,这会降低您最初想要的级别数。

    一般来说,如果你有像 c(1,1,1,2) 这样的数据,你不能把它分成 3 组。组数应小于或等于数据中的唯一值。 HTH。

    【讨论】:

      【解决方案2】:

      我在传单中遇到了同样的问题,如果没有足够的观察来制作地图,它会给出同样的错误。作为一种解决方案,我只是将观察值较低的集群组合起来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多