【发布时间】:2018-06-24 08:39:27
【问题描述】:
鉴于以下小标题:
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))
我正在尝试创建一个新列 这将填充 z 列中接下来 3 个值的最大值
例如
对于第 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 ~ 行
谢谢 拉斐尔
【问题讨论】: