Rae*_*med 1 r conditional-statements dplyr tidyverse
library(dplyr)
df <- tibble(year = 1951:2000,
val = rnorm(50))
Run Code Online (Sandbox Code Playgroud)
假设df上述情况,我想cond向 tibble 添加一个额外的列(例如 ),使其值取决于列 val 的前两行。
换句话说,如果 (val[i-1] & val[i-2]) < 0 ,则将值 1 赋予 cond[i],否则为 0。
您可以使用lag,它需要第二个参数来告诉函数您希望向量滞后多少步。因此,如果lag(val) < 0满足lag(val, 2) < 0您的标准。我已将其包装在 中tidyr::replace_na,假设您希望未定义条件的前两行为 0。
set.seed(3)
df <- tibble(year = 1951:2000, val = rnorm(50))
df %>% mutate(cond = tidyr::replace_na(as.numeric(lag(val) < 0 & lag(val, 2) < 0), 0))
#> # A tibble: 50 x 3
#> year val cond
#> <int> <dbl> <dbl>
#> 1 1951 -0.962 0
#> 2 1952 -0.293 0
#> 3 1953 0.259 1
#> 4 1954 -1.15 0
#> 5 1955 0.196 0
#> 6 1956 0.0301 0
#> 7 1957 0.0854 0
#> 8 1958 1.12 0
#> 9 1959 -1.22 0
#> 10 1960 1.27 0
#> # ... with 40 more rows
Run Code Online (Sandbox Code Playgroud)