我有一个虚拟数据集,如下。
my_data <- data.frame(date = as.Date(c("2022-03-08","2023-03-07","2022-11-29","2024-02-22")),
value = 1:4)
我有两个日期向量,如下:
tox_date_1q <- as.Date(c("2022-03-08","2023-03-07","2024-02-21"))
tox_date_3q <- as.Date(c("2022-06-21","2022-09-14","2022-11-29","2023-06-05","2023-09-13","2023-11-14"))
我想创建一列
group
,并使用以下标签之一对每一行进行分类。
c("tox_date_1q", "tox_date_3q", "tox_period_1q", "tox_period_3q", "others")
我的代码如下:
my_data <- my_data |>
mutate(group = case_when(
date %in% tox_date_1q ~ "tox_date_1q",
date %in% tox_date_3q ~ "tox_date_3q",
date > as.Date(tox_date_1q-30) & date < as.Date(tox_date_1q+30) ~ "tox_period_1q",
date > as.Date(tox_date_3q-30) & date < as.Date(tox_date_3q+30) ~ "tox_period_3q",
.default = "other"
))
我收到一条警告消息:
Warning message:
There were 4 warnings in `mutate()`.
The first warning was:
ℹ In argument: `group = case_when(...)`.
Caused by warning in `>.default`:
! longer object length is not a multiple of shorter object length
以下代码有问题,但我不知道如何修复。
date > as.Date(tox_date_1q-30) & date < as.Date(tox_date_1q+30) ~ "tox_period_1q",
date > as.Date(tox_date_3q-30) & date < as.Date(tox_date_3q+30) ~ "tox_period_3q",
也许您想测试 date 是否大于和小于所有
tox_date_1q - 30
或 tox_date_1q + 30
library(dplyr)
library(purrr)
my_data %>%
mutate(group = case_when(
date %in% tox_date_1q ~ "tox_date_1q",
date %in% tox_date_3q ~ "tox_date_3q",
map_vec(date, ~ all(.x > tox_date_1q-30) &
all(.x < tox_date_1q+30)) ~ "tox_period_1q",
map_vec(date, ~ all(.x > tox_date_3q-30) &
all(.x < tox_date_3q+30)) ~ "tox_period_3q",
.default = "other"))
date value group
1 2022-03-08 1 tox_date_1q
2 2023-03-07 2 tox_date_1q
3 2022-11-29 3 tox_date_3q
4 2024-02-22 4 other