Когда вы используете mutate
, он пропускает весь столбец в функции, следовательно, он возвращает одинаковое значение для всего столбца.Это эквивалентно
phase1_function(c(1, 2), c(2, 1), c(3, 4), c(NA, 1))
#[1] ""
Обратите внимание, что в качестве вывода возвращается только одно значение.
Вам нужно передать в них значения rowwise
library(tidyverse)
data.frame(x = x) %>%
mutate(x1 = Hmisc::Lag(x),
x2 = Hmisc::Lag(x1),
x3 = Hmisc::Lag(x2)) %>%
rowwise() %>%
mutate(x4 = phase1_function(x, x1, x2, x3))
# A tibble: 31 x 5
# x x1 x2 x3 x4
# <int> <int> <int> <int> <chr>
# 1 1 NA NA NA ""
# 2 2 1 NA NA ""
# 3 3 2 1 NA ""
# 4 4 3 2 1 phase_1
# 5 5 4 3 2 phase_1
# 6 6 5 4 3 phase_1
# 7 7 6 5 4 phase_1
# 8 8 7 6 5 phase_1
# 9 9 8 7 6 phase_1
#10 10 9 8 7 phase_1
# … with 21 more rows
Если вы хотите избежать rowwise
, другой альтернативой является использование pmap
из purrr
data.frame(x = x) %>%
mutate(x1 = Hmisc::Lag(x),
x2 = Hmisc::Lag(x1),
x3 = Hmisc::Lag(x2)) %>%
mutate(x4 = pmap(list(x, x1, x2, x3), phase1_function))