我有一個由0和非零數字組成的向量。我想知道每一個非零數字系列的長度和起始位置:找到一系列數字中的子系列的長度和位置
a = c(0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 2.6301334 1.8372030 0.0000000 0.0000000 0.0000000 1.5632647 1.1433757 0.0000000 1.5412216 0.8762267 0.0000000 1.3087967 0.0000000 0.0000000 0.0000000)
基於以前的文章中,很容易找到非零區域的起始位置: Finding the index of first changes in the elements of a vector in R
c(1,1+which(diff(a)!=0))
但是我似乎無法配置發現這些區域的長度的方式....
我曾嘗試以下:
dif=diff(which(a==0))
dif_corrected=dif-1 # to correct for the added lengths
row=rbind(postion=seq(length(a)), length=c(1, dif_corrected))
position 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
length 1 0 0 0 0 2 0 0 2 2 1 0 0 1 0
注:未顯示所有的列(實際上有20)
然後我子集這個帶走0值:
> row[,-which(row[2,]==0)]
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
position 1 6 9 10 11 14 19
length 1 2 2 2 1 1 2
這似乎是想出了一個體面的方式序列中每個非零系列的位置和長度,但它是不正確的:
位置9(標識爲非零系列的起點)是0而非10和11是非零我期望位置10和長度2出現在這裏.... 唯一正確的結果是位置6,它是第一個非零系列的開始位置 - 它被正確識別爲具有長度爲2-的所有其他位置不正確。
任何人都可以告訴我如何正確索引來確定每個非零系列的起始位置和相應的長度嗎?
注意我只是R中這樣做是因爲其指揮的實用性,但它也將是很好的知道如何做到這一點numpy的和創造職位的字典和長度值
你h在你的例子中有許多不一致之處。什麼是'v'?當你將'a'定義爲矢量時,爲什麼你有'a [1,]'?什麼是正確的結果。請修改 – Sotos
道歉將正確 –