On Jun 14, 2010, at 11:46 PM, david hilton shanabrook wrote:
basically I need to create a sliding window in a string. a way to
explain this is:
v <-
c
("a
","b
","c
","d
","e
","f
","g
","h
","i
","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y")
window <- 5
shift <- 2
I want a matrix of characters with "window" columns filled with "v"
by filling a row, then shifting over "shift" and continuing to the
next row until "v" is exhausted. You can assume "v" will evenly fit
"m"
so the result needs to look like this matrix where each row is
shifted 2 (in this case):
m
[,1] [,2] [,3] [,4] [,5]
[1,] "a" "b" "c" "d" "e"
[2,] "c" "d" "e" "f" "g"
[3,] "e" "f" "g" "h" "i"
[4,] "g" "h" "i" "j" "k"
[5,] "i" "j" "k" "l" "m"
[6,] "k" "l" "m" "n" "o"
[7,] "m" "n" "o" "p" "q"
[8,] "o" "p" "q" "r" "s"
[9,] "q" "r" "s" "t" "u"
[10,] "s" "t" "u" "v" "w"
[11,] "t" "u" "v" "w" "x"
I think you got the last row wrong:
> m <- matrix(v[sapply(1:window, function(x) seq(x,
(length(v)-window+x) ,
by = shift))],
ncol=window)
> m
[,1] [,2] [,3] [,4] [,5]
[1,] "a" "b" "c" "d" "e"
[2,] "c" "d" "e" "f" "g"
[3,] "e" "f" "g" "h" "i"
[4,] "g" "h" "i" "j" "k"
[5,] "i" "j" "k" "l" "m"
[6,] "k" "l" "m" "n" "o"
[7,] "m" "n" "o" "p" "q"
[8,] "o" "p" "q" "r" "s"
[9,] "q" "r" "s" "t" "u"
[10,] "s" "t" "u" "v" "w"
[11,] "u" "v" "w" "x" "y"
This needs to be very efficient as my data is large, loops would be
too slow. Any ideas? It could also be done in a string and then
put into the matrix but I don't think this would be easier.
I'm not sure what you mean, but I think I might have done it the way
you thought was harder. There might be a more efficient route with
modulo arithmetic. Some elaboration of
> v[((1:11)*4)%/%2 -1]
[1] "a" "c" "e" "g" "i" "k" "m" "o" "q" "s" "u"
But I don't see it immediately.
I will want to put this in a function:
shiftedMatrix <- function(v, window=5, shift=2){...
return(m)}
Left as an exercise for the reader.
-- David.
______________________________________________
R-help@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.