В taRifx есть функция shift
, которая работает с векторами. Применение этого приводит к приведению всех столбцов к символу, если таковые имеются, поэтому мы будем использовать трюк из plyr. Скорее всего, я скоро напишу для него метод data.frame:
dd <- data.frame(b = seq(4),
x = c("A", "D", "A", "C"), y = c('a','b','c','d'),
z = c(1, 1, 1, 2),stringsAsFactors=FALSE)
> dd
b x y z
1 1 A a 1
2 2 D b 1
3 3 A c 1
4 4 C d 2
library(taRifx)
library(plyr)
shift.data.frame <- colwise(shift)
> shift.data.frame(dd)
b x y z
1 2 D b 1
2 3 A c 1
3 4 C d 2
4 1 A a 1
> shift(dd,n=-1)
b x y z
1 4 C d 2
2 1 A a 1
3 2 D b 1
4 3 A c 1
> shift(dd,n=-1,wrap=FALSE)
b x y z
1 1 A a 1
2 2 D b 1
3 3 A c 1
> shift(dd,n=-1,wrap=FALSE,pad=TRUE)
b x y z
1 NA <NA> <NA> NA
2 1 A a 1
3 2 D b 1
4 3 A c 1
Преимущество shift
состоит в том, что он принимает несколько вариантов:
- n может быть положительным или отрицательным для переноса слева / справа
- Обертка может быть включена или выключена
- Если обтекание выключено, пэд можно включить на пэд с NA, поэтому вектор остается той же длины