我正在尝试根据 mod 结果生成序列,该结果在由整数变量定义的范围内,
到目前为止我尝试过的所有方法都失败并出现此类错误消息:
由
中的错误引起:case_when()
!无法计算公式 1 的左侧。
由中的错误引起:! NA/NaN 参数a:b
在变量连续的情况下,这种方法有效, 尽管有警告,除非我使用
dplyr::rowwise
。
library(dplyr)
df1 <- data.frame(cond = rep(c("a1", NA, "a1", NA), each = 20),
a = 1,
b = 3,
year = rep(1:20, 4),
freq = 5)
df1_new <-
df1 |>
rowwise() |>
mutate(new_var = case_when(cond == "a1" & year %% 5 %in% a:b ~ 1,
TRUE ~ 0))
结果应该是这样的:
ggplot2::ggplot(df1_new, aes(year, new_var)) +
ggplot2::geom_col()
但是我的数据实际上要复杂得多,在这种情况下 奇怪的是,这个数据框确实产生了所需的数据,而无需
rowwise
但使用 rowwise
会失败并显示上述错误消息。
df2 <- data.frame(cond = rep(c("a1", NA, "a1", NA), each = 20),
a = rep(c(1, NA_real_), each = 20),
b = rep(c(3, NA_real_), each = 20),
year = rep(1:20, 4),
freq = 5)
df2_new <-
df2 |>
rowwise() |>
mutate(new_var = case_when(cond == "a1" & year %% 5 %in% a:b ~ 1,
TRUE ~ 0))
任何有关识别问题的帮助以及更好的编码方法的指导将不胜感激。并帮助了解这里发生了什么。
还有另一种方法:
df1 |>
mutate(new_var = !is.na(cond) & cond == "a1" & between(year %% 5, a, b))
# or, if you have more conditions you haven't shared with us:
df1 |>
mutate(new_var = case_when(
!is.na(cond) & cond == "a1" & between(year %% 5, a, b) ~ TRUE,
TRUE ~ FALSE
))