Ho un raster binario come questo:
101101
010111
101011
111101
Ora ho bisogno di fare questa riga per riga: Passa attraverso la riga e conta le celle adiacenti che sono 1 (solo le celle nella riga!). E mi piacerebbe avere un vettore o qualcosa del genere. per esempio per il raster sopra sarebbe:
1st row: 1 2 1
2nd row: 1 3
3rd row: 1 1 2
4th row: 4 1
Ho letto molto sull'algoritmo di riempimento delle piene e così via. Ma io non lo faccio bene.
Ho provato questo algoritmo ricorsivo:
rec=function(x)
{if (x==0)
{return 0)
else return(1+rec(x+1))}
Ma non funziona.
risposte:
0 per risposta № 1Potresti provare a usare rle
.
xy <- read.table(text = "1 0 1 1 0 1
0 1 0 1 1 1
1 0 1 0 1 1
1 1 1 1 0 1", sep = "")
xy
apply(xy, MARGIN = 1, FUN = function(x) {
x <- rle(x)
x$lengths[x$values == 1]
})
[[1]]
V2 V5
1 2 1
[[2]]
V3
1 3
[[3]]
V2 V4
1 1 2
[[4]]
V5
4 1
0 per risposta № 2
Non è necessario alcun algoritmo di riempimento inondazione, anche la ricorsione non è necessaria.
Basta contare non zeri. La macchina di stato più semplice:
Starting state in the beginning of every line is 0
When state is 0 and you meet 1, remember X-position Start and make state 1
When state is 1 and you meet 0, make state 0 and add `Current - Start` to list
In other cases do nothing