С учетом следующего тибля:
library(tidyverse)
set.seed(1)
my_tbl = tibble(x = rep(words[1:5], 50) %>% sort(),
y = 1:250,
z = sample(seq(from = 30 , to = 90, by = 0.1), size = 250, replace = T))
я пытаюсь создать новый столбец
который заполнит максимальное значение следующих 3 значений в столбце z
например
для строки 1 max_3_next должно быть 84,5 (для строки 4)
для строки 5 max_3_next должно быть 86,7 (из строки 7)
вот что я пытаюсь сделать:
my_tbl %>%
mutate(max_next_3 = max(.$z[(y + 1):(y + 3)]))
> my_tbl %>%
+ mutate(max_3_next = max(.$z[(y + 1):(y + 3)]))
# A tibble: 250 x 4
x y z max_3_next
<chr> <int> <dbl> <dbl>
1 a 1 45.9 84.5
2 a 2 52.3 84.5
3 a 3 64.4 84.5
4 a 4 84.5 84.5
5 a 5 42.1 84.5
6 a 6 83.9 84.5
7 a 7 86.7 84.5
8 a 8 69.7 84.5
9 a 9 67.8 84.5
10 a 10 33.7 84.5
# ... with 240 more rows
Warning messages:
1: In (y + 1):(y + 3) :
numerical expression has 250 elements: only the first used
2: In (y + 1):(y + 3) :
numerical expression has 250 elements: only the first used
Я получаю вышеупомянутые предупреждения
Как мне изменить код для достижения желаемого результата?
Я предпочитаю решение dplyer
Но я также буду рад узнать и о других решениях, поскольку производительность - это проблема
так как исходный набор данных может иметь 1 M ~ строк
Спасибо
Рафаэль