Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将向量中的值插值/拉伸到指定长度_R_Interpolation_Data Manipulation_Data Cleaning_Data Processing - Fatal编程技术网

R 将向量中的值插值/拉伸到指定长度

R 将向量中的值插值/拉伸到指定长度,r,interpolation,data-manipulation,data-cleaning,data-processing,R,Interpolation,Data Manipulation,Data Cleaning,Data Processing,我有不同长度的向量 比如说, a1=c(1,2,3,4,5,6,7,8,9,10)a2=c(1,3,4,5)a3=c(1,2,5,6,9) 我想把a2和a3延伸到a1的长度,这样我可以在上面运行一些算法,要求向量的长度相同。我会截断a1,使其与a2和a3相同,但最终会丢失有价值的数据 也就是说a2可能看起来有点像11133445 任何建议都很好! 谢谢 编辑:我需要它来处理具有重复值的向量,例如c(1,1,2,2,2,3,3)和拉伸值,以表示原始向量中重复值的数量,例如,如果我将示例向量拉伸到1

我有不同长度的向量 比如说,

a1=c(1,2,3,4,5,6,7,8,9,10)a2=c(1,3,4,5)a3=c(1,2,5,6,9)

我想把a2和a3延伸到a1的长度,这样我可以在上面运行一些算法,要求向量的长度相同。我会截断a1,使其与a2和a3相同,但最终会丢失有价值的数据

也就是说a2可能看起来有点像11133445

任何建议都很好! 谢谢


编辑:我需要它来处理具有重复值的向量,例如c(1,1,2,2,2,3,3)和拉伸值,以表示原始向量中重复值的数量,例如,如果我将示例向量拉伸到100的长度,我希望2的长度大于1的长度。

一种方法是在定义长度的两点之间创建序列

#Put the data in a list
list_data <- list(a1 = a1, a2 = a2, a3 = a3)
#Get the max length
max_len <- max(lengths(list_data))
#Create a sequence
list_data <- lapply(list_data, function(x) 
                    seq(min(x), max(x), length.out = max_len))

#$a1
# [1]  1  2  3  4  5  6  7  8  9 10

#$a2
# [1] 1.000 1.444 1.889 2.333 2.778 3.222 3.667 4.111 4.556 5.000

#$a3
# [1] 1.000 1.889 2.778 3.667 4.556 5.444 6.333 7.222 8.111 9.000

但是,这并不保证原始数据点会保留在数据中。例如,
a2
在数据中有3和4,但在这个修改过的向量中不存在。

听起来像是在寻找类似以下内容的内容:

lengthen <- function(vec, length) {
  vec[sort(rep(seq_along(vec), length.out = length))]
}

lengthen(a2, length(a1))
# [1] 1 1 1 3 3 3 4 4 5 5
lengthen(a3, length(a1))
# [1] 1 1 2 2 5 5 6 6 9 9
lengthen(a4, length(a1))
# [1] 5 5 5 1 1 1 3 3 4 4
lengthen(a5, length(a1))
# [1] 1 1 1 1 1 1 4 4 5 5

谢谢这很有帮助。只是想知道,如果我有像c(1,1,2,2,3,4,4,5,5)这样的数据,当向量中有重复项时它就不起作用了。你知道在这方面有什么解决办法吗?干杯
lengthen <- function(vec, length) {
  vec[sort(rep(seq_along(vec), length.out = length))]
}

lengthen(a2, length(a1))
# [1] 1 1 1 3 3 3 4 4 5 5
lengthen(a3, length(a1))
# [1] 1 1 2 2 5 5 6 6 9 9
lengthen(a4, length(a1))
# [1] 5 5 5 1 1 1 3 3 4 4
lengthen(a5, length(a1))
# [1] 1 1 1 1 1 1 4 4 5 5
a1 = c(1,2,3,4,5,6,7,8,9,10)
a2 = c(1,3,4,5)
a3 = c(1,2,5,6,9)
a4 = c(5,1,3,4)
a5 = c(1,1,4,5)