在 case_when() 中使用条件一次?

问题描述 投票:0回答:1

我有一个包含多个时间点的数据框,但我只想定义每个时间点的第一个事件。 F.i.,仅选择 12 个月到 24 个月之间的第一个事件,而不是全部。

data %>% 
 mutate(
    timepoint_over_time = as.numeric(
      case_when(
      accepted_reduction == "x" ~ "0",
      time_from_injury_months >= 24 & time_from_injury_months < 36 ~ "2",
      time_from_injury_months >= 36 & time_from_injury_months < 48 ~ "3",
      time_from_injury_months >= 48 & time_from_injury_months < 60 ~ "4"
      )
    )
  )

我尝试过 case_when 和 if_else 但它为每个事件记录了一个值。因为我想分析时间线,所以可以只做一次吗?

我已上传示例文件此处

r dplyr case
1个回答
0
投票

您可以按相应的时间段对数据进行分组,然后使用 min 过滤数据以查找每组中的最小值:

library(dplyr)

data <- tibble(time_from_injury_months = runif(100, 24, 59),
               accepted_reduction = sample(c("x", "y"), 100, replace = TRUE))

data %>% 
 mutate(
    timepoint_over_time = as.numeric(
      case_when(
      accepted_reduction == "x" ~ "0",
      time_from_injury_months >= 24 & time_from_injury_months < 36 ~ "2",
      time_from_injury_months >= 36 & time_from_injury_months < 48 ~ "3",
      time_from_injury_months >= 48 & time_from_injury_months < 60 ~ "4"
      )
    )
  ) %>% 
  group_by(timepoint_over_time) %>% 
  filter(time_from_injury_months == min(time_from_injury_months))
© www.soinside.com 2019 - 2024. All rights reserved.