madr
2010-Nov-22 20:53 UTC
[R] I need a very specific unique like function and I don't know even how to properly call this
consider this matrix:
[,1] [,2]
[1,] 3 7
[2,] 6 5
[3,] 7 5
[4,] 3 5
[5,] 7 5
[6,] 5 5
[7,] 8 4
[8,] 2 4
[9,] 7 4
[10,] 0 6
I need to delete all rows where column 2 above and below has the same value,
so the effect would be:
[,1] [,2]
[1,] 3 7
[2,] 6 5
[6,] 5 5
[7,] 8 4
[9,] 7 4
[10,] 0 6
is there a built in function for that kind of operation or I must write one
from scratch ?
Is there a name for that kind of operation ?
--
View this message in context:
http://r.789695.n4.nabble.com/I-need-a-very-specific-unique-like-function-and-I-don-t-know-even-how-to-properly-call-this-tp3054427p3054427.html
Sent from the R help mailing list archive at Nabble.com.
Ista Zahn
2010-Nov-22 21:51 UTC
[R] I need a very specific unique like function and I don't know even how to properly call this
Here is a method for piecing it together using diff and indexing:
dat <- structure(c(3L, 6L, 7L, 3L, 7L, 5L, 8L, 2L, 7L, 0L, 7L, 5L, 5L,
5L, 5L, 5L, 4L, 4L, 4L, 6L), .Dim = c(10L, 2L), .Dimnames = list(
NULL, c("V1", "V2")))
diffs <- abs(diff(dat[,2], 1)) # get the difference between each
value and the previous value
new.dat <- cbind(dat, c(NA, diffs), c(diffs, NA)) # combine the diffs
with the original matrix, shifted down (is the next valued the same as
the value) and down (is the previous value the same)
new.dat <- cbind(new.dat, rowSums(new.dat[,3:4], na.rm=TRUE)) # sum
the shifted diffs so that the value is 0 if above and below are the
same, and greater than zero if the above and below values are not the
same
final.dat <- new.dat[new.dat[,5] !=0 ,1:2] # get rid of rows for
which the sum of the shifted diffs is not equal to zero.
HTH,
Ista
On Mon, Nov 22, 2010 at 8:53 PM, madr <madrazel at interia.pl>
wrote:>
> consider this matrix:
>
> ? ? ?[,1] [,2]
> ?[1,] ? ?3 ? 7
> ?[2,] ? ?6 ? 5
> ?[3,] ? ?7 ? 5
> ?[4,] ? ?3 ? 5
> ?[5,] ? ?7 ? 5
> ?[6,] ? ?5 ? 5
> ?[7,] ? ?8 ? 4
> ?[8,] ? ?2 ? 4
> ?[9,] ? ?7 ? 4
> [10,] ? ?0 ? 6
>
> I need to delete all rows where column 2 above and below has the same
value,
> so the effect would be:
>
> ? ? ?[,1] [,2]
> ?[1,] ? ?3 ? 7
> ?[2,] ? ?6 ? 5
> ?[6,] ? ?5 ? 5
> ?[7,] ? ?8 ? 4
> ?[9,] ? ?7 ? 4
> [10,] ? ?0 ? 6
>
> is there a built in function for that kind of operation or I must write one
> from scratch ?
> Is there a name for that kind of operation ?
> --
> View this message in context:
http://r.789695.n4.nabble.com/I-need-a-very-specific-unique-like-function-and-I-don-t-know-even-how-to-properly-call-this-tp3054427p3054427.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Ista Zahn
Graduate student
University of Rochester
Department of Clinical and Social Psychology
http://yourpsyche.org
Phil Spector
2010-Nov-22 23:20 UTC
[R] I need a very specific unique like function and I don't know even how to properly call this
Given a vector, x, we can test if the value above
it is equal to itself with
abv = c(FALSE,x[-l] == x[-1])
and if the value below is equal to itself with
blw = c(x[-l] == x[-1],FALSE)
So, for your problem:
> abv = c(FALSE,dat[,2][-l] == dat[,2][-1])
> blw = c(dat[,2][-l] == dat[,2][-1],FALSE)
> dat[!(abv & blw),]
[,1] [,2]
[1,] 3 7
[2,] 6 5
[3,] 5 5
[4,] 8 4
[5,] 7 4
[6,] 0 6
- Phil Spector
Statistical Computing Facility
Department of Statistics
UC Berkeley
spector at stat.berkeley.edu
On Mon, 22 Nov 2010, madr wrote:
>
> consider this matrix:
>
> [,1] [,2]
> [1,] 3 7
> [2,] 6 5
> [3,] 7 5
> [4,] 3 5
> [5,] 7 5
> [6,] 5 5
> [7,] 8 4
> [8,] 2 4
> [9,] 7 4
> [10,] 0 6
>
> I need to delete all rows where column 2 above and below has the same
value,
> so the effect would be:
>
> [,1] [,2]
> [1,] 3 7
> [2,] 6 5
> [6,] 5 5
> [7,] 8 4
> [9,] 7 4
> [10,] 0 6
>
> is there a built in function for that kind of operation or I must write one
> from scratch ?
> Is there a name for that kind of operation ?
> --
> View this message in context:
http://r.789695.n4.nabble.com/I-need-a-very-specific-unique-like-function-and-I-don-t-know-even-how-to-properly-call-this-tp3054427p3054427.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
Reasonably Related Threads
- increase or decrease variable by 1
- how to get rid of unused space on all 4 borders in plot() render
- [beginner] simple keyword to exit script ?
- longer object length is not a multiple of shorter object length
- please show me simple example how to plot "Distance-Weighted Least Squares" fitting