我有一个在 R 语言中的整数向量。我希望从该向量中随机选择 n 个位置,并在向量中进行“合并”(即求和)。这个过程可以发生多次,例如,在长度为 100 的向量中,可能会发生 5 次合并/求和事件,其中每个事件分别合并了 2、3、2、4 和 2 个向量位置。例如:
#An example original vector of length 10:
ex.have<-c(1,1,30,16,2,2,2,1,1,9)
#For simplicity assume some process randomly combines the
#first two [1,1] and last three [1,1,9] positions in the vector.
ex.want<-c(2,30,16,2,2,2,11)
#Here, there were two merging events of 2 and 3 vector positions, respectively
#EDIT: the merged positions do not need to be consecutive.
#They could be randomly selected from any position.
除此之外,我还需要记录有多少个向量位置被“合并”,(如果向量中的位置没有被合并,则包括值1) - 把它们称为索引。由于上面的示例中第一个和第二个位置被合并,最后三个位置也被合并,因此索引数据看起来像:
ex.indices<-c(2,1,1,1,1,1,3)
最后,我需要把所有数据放入一个矩阵中,因此上面示例中的最终数据将是一个2列矩阵,其中一列为整数,另一列为索引:
ex.final<-matrix(c(2,30,16,2,2,2,11,2,1,1,1,1,1,3),ncol=2,nrow=7)
目前我正在寻求帮助,即在最简单的步骤上:合并向量中的位置。我已经尝试了多种sample
和split
函数的变化,但是一直没有进展。例如,sum(sample(ex.have,2))
将累加两个随机选择的位置(或sum(sample(ex.have,rpois(1,2))
将在n值上添加一些随机性),但我不确定如何利用它来实现所需的数据集。详尽的搜索导致了关于合并向量的多篇文章,但没有关于合并向量中的位置的文章,如果这是一个重复的问题,我很抱歉。如何处理这些问题的任何建议都将不胜感激。
1
和4
位置的情况下,你的输出会是什么样子?具体来说,ex.indices
会是什么样子? - Cole4
位置(连同最后3个一起)合并了1
和4
,并且结果向量为c(1,30,17,2,2,2,11),则索引将为c(1,1,2,1,1,1,3)。但是如果它在原始的1
位置c(17,1,30,2,2,2,11),ides将为c(2,1,1,1,1,1,3)。求和发生的位置不重要,只要将索引映射到合并的位置即可。 - jpsmith