均匀分配成较大的一组

时间:2011-09-17 11:42:26

标签: algorithm r interpolation distribute

有人可以指点我读一些给定n的算法,将它的元素放在一个更大的集m中,均匀间隔(尽可能多)。我打算插入剩余的值。

所以我有一组包含

的3个元素
    1 ,5 ,6 

我希望尽可能地将其分布在10个插槽的数据框中,其中第1个和最后一个元素为第1个,最后一个元素在新集合中相应:

    1 [] [] [] 5 [] [] [] [] 6

提前致谢。

PS。我试图通过R

实现这一目标

3 个答案:

答案 0 :(得分:1)

我考虑回答你的问题,但后来我想到了最终目标,在我看来,生成平均分布较小的矢量的矢量不会轻易促进插值。以下内容为您提供插值向量。

bigLength <- 10
data <- c(1, 5, 6)
n <- length(data) - 1
breakLength <- bigLength / n
breaks <- floor(rep(breakLength+1, n))
breaks[1] <- breaks[1]-1
extra <- bigLength %% n
if (extra > 0) for(i in 1:extra) breaks[i] <- breaks[i]+1
y <- unlist ( lapply(1:n, function(i){ 
   y <- seq(data[i], data[i+1], length.out = breaks[i])
   return(y[-1])
   }) )
y <- c(data[1], y)
y         

答案 1 :(得分:1)

我认为你应该使用术语“向量”,无论如何,它都具有这个问题所需的位置和长度的概念。 (数学集是无序的,因此没有位置解释,R确实设置了运算符和函数。)

# Make up an empty vector:
vec <- vector("numeric", length=10)
# create a vector of items to place
 items <- c(1,5,6)
#Put the first one in the first empty "slot" and the last in the last/
 vec[1] <- items[1]
 vec[length(vec)] <- items[length(items)]
#Now find a positions for the remaining element(s)
 seq(1,length(vec), by=length(vec)/(length(items)-1))[-c(1,length(items))]
#[1] 6
# And place them (or it in this case) ....
  vec[ seq(1,length(vec), by=length(vec)/(length(items)-1))[
                        -c(1,length(items))] ] <- 
                              items[ -c(1,length(items)) ] 
 vec
# [1] 1 0 0 0 0 5 0 0 0 6

答案 2 :(得分:0)

即使认为“集合”的概念在这里有点奇怪,你可能想做直方图归一化(有时称为对比度拉伸)或直方图均衡等事情。