Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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_Vector_Sequence - Fatal编程技术网

R 按特定长度和值组合增长向量

R 按特定长度和值组合增长向量,r,vector,sequence,R,Vector,Sequence,我有这个向量: a = c(4,5,6,81,82,83) 我期望的结果如下: b = c(1,2,3,4,5,6,78,79,80,81,82,83) 我的逻辑是:a中有两个不同的序列,这可以通过使用纵向HDIFFA>1+1进行检查。其中每一个都必须从后面延伸,以达到1:end_of_first_seq end_of_first_seq=a[其定义大于1[1]因此,在这种情况下,每个序列的长度应为6。因此,每个序列必须向后增长三步,因此4,5,6变为1,2,3,4,5,6,81,82,

我有这个向量:

a = c(4,5,6,81,82,83)  
我期望的结果如下:

b = c(1,2,3,4,5,6,78,79,80,81,82,83)
我的逻辑是:a中有两个不同的序列,这可以通过使用纵向HDIFFA>1+1进行检查。其中每一个都必须从后面延伸,以达到1:end_of_first_seq end_of_first_seq=a[其定义大于1[1]因此,在这种情况下,每个序列的长度应为6。因此,每个序列必须向后增长三步,因此4,5,6变为1,2,3,4,5,6,81,82,83变为78,79,80,81,82,83,而所有序列都在同一个向量中


有什么快速的方法可以做到这一点吗?这是一个简单的例子,序列的数量可能会更高。值得一提的是,在这种情况下,所有之前的序列都是相同的长度,3并且它们至少被两个值分开。像6,7,8,9,10,11这样的情况是不可能发生的。我知道我可以用循环来做到这一点,但速度是一个因素。

我们计算len由于所有序列的长度相同,我们可以提取每个n值,并在每个序列的两点之间创建一个序列

length_of_each_seq <- a[which.max(diff(a)>1)]
n <- 3

vals <- a[seq(n, length(a), by = n)]
c(mapply(`:`, vals - (length_of_each_seq - 1), vals))
#[1]  1  2  3  4  5  6 78 79 80 81 82 83
VAL——每个序列的长度——1是我们需要开始的地方

vals - (length_of_each_seq - 1)
#[1]  1 78

我们计算每个序列的长度,因为所有序列的长度都相同,所以我们可以提取每个n值,并在每个序列的两个点之间创建一个序列

length_of_each_seq <- a[which.max(diff(a)>1)]
n <- 3

vals <- a[seq(n, length(a), by = n)]
c(mapply(`:`, vals - (length_of_each_seq - 1), vals))
#[1]  1  2  3  4  5  6 78 79 80 81 82 83
VAL——每个序列的长度——1是我们需要开始的地方

vals - (length_of_each_seq - 1)
#[1]  1 78

如果所有序列长度相同:

vec <- c(4,5,6,81,82,83)  

LEN <- 3 # sequence length

want <- matrix(vec, ncol = LEN, byrow = TRUE)
want <- cbind(want - LEN, want)
want <- as.vector(t(want))
want
# [1]  1  2  3  4  5  6 78 79 80 81 82 83

如果所有序列长度相同:

vec <- c(4,5,6,81,82,83)  

LEN <- 3 # sequence length

want <- matrix(vec, ncol = LEN, byrow = TRUE)
want <- cbind(want - LEN, want)
want <- as.vector(t(want))
want
# [1]  1  2  3  4  5  6 78 79 80 81 82 83

所以每个序列的长度都必须是6,因为长度1:end_of_first_序列的长度是6。如果有一个序列的长度大于6,那么在这个例子中,如果a=c4,5,6,81,82,83,84,85,86,87。87会被删除吗?好问题,但正如我所写的,所有之前的序列的长度都是相等的。另外,两个prev序列之间至少有2个值分开是的。我会在原来的问题上加上这个。所以每个序列的长度都必须是6,因为长度1:end_of_first_序列是6。如果有一个序列的长度超过6,会怎么样。所以在这个例子中,如果a=c4,5,6,81,82,83,84,85,86,87。87会被删除吗?好问题,但正如我所写的,前面所有序列的长度都是相等的。另外,两个prev序列至少由2个值分隔。我将把它添加到原始问题中。