按间隔除矢量,以便最小的组具有一定的大小

时间:2016-04-06 16:08:01

标签: r vector

假设我有一个矢量a,像这样:

set.seed(1)
a <- sort(abs(rnorm(500, mean = 1000, sd = 350)))

我想找出那个间隔的最小尺寸(或可能是范围,我不确定这里的英文单词,对不起),如果你剪切矢量,最小的组将有例如30个元素。

在这种情况下,结果如下所示:

cut(a, breaks = seq(0, max(a) + a[30], by = a[30]))

a[30](此处为462.2426)将是我正在搜索的值。在这种情况下,很容易找到它,因为向量是正态分布的,并且值很可能是a[30]max(a) - a[length(a) - 30]。但是如何找到它一般?

如果有人对这有什么好处感兴趣:在变异函数中,滞后类应该包含至少30个点对(近似经验值),但是你得到的滞后类越多,你的变异函数看起来就越好(或者在一些罕见的情况下)从滞后类中得出的绘图点只会使你的变异函数可解释。我正在寻找的价值将作为width参数传递给gstat::variogram

对不起,如果这个问题是重复的,但我当时找不到另一个。

1 个答案:

答案 0 :(得分:0)

如果我执行前两个命令然后

table(cut(a, breaks = seq(0, max(a) + a[30], by = a[30])))

我得到了输出

        (0,462]           (462,924]      (924,1.39e+03] (1.39e+03,1.85e+03] (1.85e+03,2.31e+03] (2.31e+03,2.77e+03] 
             30                 175                 226                  65                   3                   1 

因此a[30]似乎不是您要查找的数字,因为有两个组的元素少于30个。

也许你可以考虑一下你的问题并以更精确的方式陈述它。我看到的一个问题是,在很多情况下,最后一组只有很少的元素(如在你的例子中),所以也许你应该把最后一个组视为特殊组,而不是要求它应该至少有30个元素。如果您排除超过30&#39;的第一组和最后一组。条件,然后

intLength <- max(a[k:n] - a[1:(n-k+1)])
startingPoint <- a[which.max(a[k:n] - a[1:(n-k+1)])]
breakPoints1 <- seq(startingPoint-intLength, min(a)-intLength, by = -intLength)
breakPoints2 <- seq(startingPoint, max(a)+intLength, by = intLength)
cut(a, breaks = c(breakPoints1,breakPoints2))

n = 500k = 31)可能对您有所帮助。