[R] shifted window of string

Gabor Grothendieck ggrothendieck at gmail.com
Tue Jun 15 12:17:38 CEST 2010


Try this:

v <- letters; windows <- 5; shift <- 2

e <- embed(v, window)
e[seq(1, nrow(e), shift), window:1]

On Mon, Jun 14, 2010 at 11:46 PM, david hilton shanabrook
<davidshanabrook at me.com> 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"
>
> 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 will want to put this in a function:
>
> shiftedMatrix <- function(v, window=5, shift=2){...
>
> return(m)}
>
> thanks
>
> dhs
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list