select array data in which column n's values rise consecutively

maziana

New Member
I want to select only the data from an array that is sequential by column n. For example:

Code:
n <- c(1, 2, 4, 6, 7, 8, 9, 11)
x <- c(10, 20, 30, 40, 50, 60, 80, 90)
y <- c(60, 20, 40, 90, 10, 30, 50, 40)

a <- cbind(n,x,y)

a
n  x  y
[1,]  1 10 60
[2,]  2 20 20
[3,]  4 30 40
[4,]  6 40 90
[5,]  7 50 10
[6,]  8 60 30
[7,]  9 80 50
[8,] 11 90 40
I want to create array b with rows 1,2, 4-7, because the n increases by an integer consecutively (n= 1,2, 6-9). Thus, my output of array b should look like:

Code:
n  x  y
[1,]  1 10 60
[2,]  2 20 20
[3,]  6 40 90
[4,]  7 50 10
[5,]  8 60 30
[8,]  9 80 50
I tried to use the code here (http://r.789695.n4.nabble.com/Efficient-way-to-find-consecutive-integers-in-vector-td843506.html) to solve this problem, but it works for vectors, not arrays. Besides, this seems like an easier problem that I am over-complicating. Before this point, I sorted a by increasing integers in n, so I only need to remove data that is not sequential. I'd appreciate any help, thanks.

Dason

So just use the solution on the vector that is the column of the matrix you're interested in and then use those indices to index the matrix.

trinker

ggplot2orBust
I'm in a hurry so I can't explain the logic but this works:

Code:
x <- c(FALSE, diff(a[, 1]) == 1)
y <- rle(x)