我有一个带有变量的数据帧,其中列出了每个人发生事件X的日期。该日期表示事件的第一天,该事件可以持续一定天数。我还有另一个变量Z,它也是一个日期。我想看看日期Z是否与日期X +潜在范围交叉,并创建一个新变量列表"交叉";和"No_Cross_Over".
下面的代码看起来是可行的,但是非常费力。有更快的方法吗?
df$NewVar <- ifelse(df$X == d1$Z | df$X == df$Z -2 | df$X == df$Z -1| df$X == df$Z +1| df$X == df$Z +2, "Cross_OVer", "No_Cross_Over")
您可以像下面这样做:
library(tidyverse)
# Made-up data
sample_data <- tribble(~x, ~range, ~z,
"2022-01-01", 2, "2022-01-02",
"2022-01-01", 3, "2022-01-10",
"2022-01-10", 10, "2022-01-15",
"2022-01-31", 5, "2022-02-02",
"2022-01-31", 3, "2022-02-04",
"2022-02-28", 2, "2022-03-01"
)|>
mutate(across(c(x, z), as.Date))
# Actual code
sample_data |>
mutate(cross = if_else(z >= x & z <= x + range, "Cross_Over", "No_Cross_Over"))
#> # A tibble: 6 × 4
#> x range z cross
#> <date> <dbl> <date> <chr>
#> 1 2022-01-01 2 2022-01-02 Cross_Over
#> 2 2022-01-01 3 2022-01-10 No_Cross_Over
#> 3 2022-01-10 10 2022-01-15 Cross_Over
#> 4 2022-01-31 5 2022-02-02 Cross_Over
#> 5 2022-01-31 3 2022-02-04 No_Cross_Over
#> 6 2022-02-28 2 2022-03-01 Cross_Over
在2022-05-23由reprex包(v2.0.1)创建