сдвиг столбцов вверх или вниз на n строк в кадре данных - PullRequest
0 голосов
/ 04 декабря 2018

Предположим, у меня есть следующие data.frame df:

set.seed(1)
df = data.frame(a = rnorm(10), 
                b = rnorm(10), 
                c = rnorm(10), 
                d = rnorm(10))

> df
            a           b           c           d
1  -0.6264538  1.51178117  0.91897737  1.35867955
2   0.1836433  0.38984324  0.78213630 -0.10278773
3  -0.8356286 -0.62124058  0.07456498  0.38767161
4   1.5952808 -2.21469989 -1.98935170 -0.05380504
5   0.3295078  1.12493092  0.61982575 -1.37705956
6  -0.8204684 -0.04493361 -0.05612874 -0.41499456
7   0.4874291 -0.01619026 -0.15579551 -0.39428995
8   0.7383247  0.94383621 -1.47075238 -0.05931340
9   0.5757814  0.82122120 -0.47815006  1.10002537
10 -0.3053884  0.59390132  0.41794156  0.76317575

Я хочу сдвинуть (только) столбцы b, c и d, скажем, на 3 строки,Столбец a должен оставаться фиксированным, а строки с NAs удалены.

Вот мой желаемый вывод для сдвига 3 строк:

> df_shift_3
            a           b           c           d
1  -0.6264538 -2.21469989 -1.98935170 -0.05380504 
2   0.1836433  1.12493092  0.61982575 -1.37705956
3  -0.8356286 -0.04493361 -0.05612874 -0.41499456
4   1.5952808 -0.01619026 -0.15579551 -0.39428995
5   0.3295078  0.94383621 -1.47075238 -0.05931340
6  -0.8204684  0.82122120 -0.47815006  1.10002537
7   0.4874291  0.59390132  0.41794156  0.76317575 

Как я могу создать функцию, котораяобобщить этот вывод для up или down сдвига n строк?

Я пытался использовать следующую функцию https://rdrr.io/cran/useful/man/shift.column.html, но безуспешно.

Спасибо залюбая помощь

1 Ответ

0 голосов
/ 04 декабря 2018

Функция lead/lag из dplyr полезна для этого.df %>% mutate_at(-1, ~lead(., 3)) %>% slice(1:(n()-3))

И вы можете сделать это функцией

shift_all_but_first <- function(data, N) data %>% mutate_at(-1, ~lead(., N)) %>% slice(1:(n()-N))

shift_all_but_first(df, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...