【发布时间】:2022-06-10 23:54:22
【问题描述】:
我有一个如下所示的数据框:
Park Date Coy_season AC_code Aggr_Code Presence AC AC_conducted
<chr> <dttm> <dbl> <chr> <chr> <chr> <dbl> <dbl>
1 14st NE - Coventry 2019-01-30 00:00:00 1 3 1 1 0 0
2 14st NE - Coventry 2019-01-30 00:00:00 1 0 1 1 0 0
3 14st NE - Coventry 2019-01-30 00:00:00 1 4 1 1 0 0
4 14st NE - Coventry 2019-01-30 00:00:00 1 1 1 1 0 0
5 14st NE - Coventry 2019-02-01 00:00:00 1 4 1 1 3 1
6 14st NE - Coventry 2019-02-01 00:00:00 1 2 1 1 3 1
其中 AC_code 是治疗,从 0 到 6 不等,0 是控制。我想在这个数据框中添加一列“Last_Treatment”,这将表明每个公园的最后一次治疗(AC_code 的滞后)是什么,如果另一个治疗在事件之前不到 28 天并且最后一次治疗不是 0。如果最后一次治疗是 0,我希望它跳过那个 0 并寻找之前的治疗,除非在 28 天前没有进行其他治疗,在这种情况下,我希望它返回 NA。
除了跳过 0 值之外,我有以下代码几乎可以执行所有操作:
Coyote_presence_2 <- Coyote_presence_2 %>%
group_by(Park) %>%
mutate(Last_Treatment = if_else((Date - lag(Date))<28*60*60*24, lag(AC_code), as.character(NA)))
我尝试了以下代码,但它返回错误:
Coyote_presence_2 <- Coyote_presence_2 %>%
group_by(Park) %>%
mutate(Last_Treatment = if_else((Date - lag(Date))<28*60*60*24, lag(AC_code > 0), as.character(NA)))
Error: Problem with `mutate()` column `Last_Treatment`.
i `Last_Treatment = if_else(...)`.
x `false` must be a logical vector, not a character vector.
i The error occurred in group 1: Park = "14st NE - Coventry".
Backtrace:
1. `%>%`(...)
7. dplyr::if_else(...)
8. dplyr:::replace_with(...)
9. dplyr:::check_type(val, x, name)
10. dplyr:::glubort(header, "must be {friendly_type_of(template)}, not {friendly_type_of(x)}.")
dplyr 解决方案是首选,但我会考虑其他建议!
【问题讨论】: