如何为 r 中的特定数量的值插入日期?

how to interpolate date for specific number of values in r?

这是我的数据:

data<-c(10, 20, 55, 80, 73, 58, 46, 36, 27.5, 20, 15, 13, 11)

正如所见,值的数量是13。但我希望它是289个值。要执行此操作,我想插入我的数据,如:

10.0 10.2 10.3 10.5 ... 20.0 20.4.. 21.0...55....80...

简而言之,我想在数据值之间赋值。两个值之间的范围并不重要。但重要的是,值的数量将是 289。抱歉我的叙述不当

我不清楚您想如何在不同值之间进行插值。但最简单的解决方案是,如果您只是希望值介于原始 13 个值的最小值和最大值之间,则使用 seq:

data <- seq(min(data), max(data), length=289)

当然,如果您的意思是要添加 289 个值,则该行应为:

data <- seq(min(data), max(data), length=289+length(data))

这对数字的中间排序有点不确定,但它确实填充了值。

datavector <- c(10, 20, 55, 80, 73, 58, 46, 36, 27.5, 20, 15, 13, 11)
desired_length <- 289

make_longer <- function(datavector, desired_length, seed = 4){ 
  
  # floor should ensure you either reach or meet the desired length but 
  # never exceed it 
  multiple <- floor(desired_length/length(datavector))
  set.seed(seed)
  
  holder = NULL
  for(i in 1: (length(datavector)-1) ){ 
    
  min = min( c(datavector[i], datavector[i+1]) )
  max = max( c(datavector[i], datavector[i+1]) )
  
  holder = c(holder, datavector[i],  
             sort ( runif(n = multiple, min = min, max = max ) ) ,
  datavector[i+1])
  }
  
  if(length(holder) < desired_length){ 
    fill_count = desired_length - length(holder)
    
    # store various final values 
    temp_holder = holder[-length(holder)]
    new_min = min( c(holder[length(holder)-1],holder[length(holder)]) )
    new_max = max( c(holder[length(holder)-1],holder[length(holder)]) )
    
    final_holder <- c(temp_holder, sort(
      runif(n = fill_count, min = new_min, max = new_max)
    ) , holder[length(holder)])
    
    return(final_holder)
  } else { 
    return(holder)  
    }

  }

Plot of result for your numbers and seed = 4

更简单的答案:

data <- c(10, 20, 55, 80, 73, 58, 46, 36, 27.5, 20, 15, 13, 11)
maxlength <- 315
interpolated_data <- vector()

for (i in 1:(length(data)-1)) {
     interpolated_data <- c(interpolated_data, seq(data[i], data[i+1], length=as.integer((maxlength)/(length(data)-1)))) 
}

while (length(interpolated_data)<maxlength) {
     interpolated_data <- c(interpolated_data, interpolated_data[length(interpolated_data)])
}

我不确定您希望如何处理无法均匀分布在间隔中的其他元素的情况。您可以使用 while 循环来解决该行为。现在我只是再次添加了最后一个元素,但这是您的选择。