按级别过滤并获取值

filter in levels and fetch a value

我的情况有点复杂, 我是 运行 诊所,我需要你的帮助:

我有一个因子类型为“c_code”的列,它有许多不同长度的级别。 在每一行中,我都有一个“会话”列,它表示客户端的会话号。 我正在尝试仅获取每个 c_code 级别的最高会话,并检查自该客户接受治疗以来是否已经超过一周。 这是我正在使用的 DF:

如您所见,我正在尝试使用这一行:

mutate(bigThan6= if_else(as.double(todayDate - date) > 6, 1, 0))

如果差值大于 6,则“bigThan6”列为 1。

我的问题是我不希望它在我的整行中完成 - 只有那些在图片中突出显示的:每个“c_code”级别中的最高会话

您可以进行如下操作

library(dplyr)

df %>%
  group_by(c_code) %>%
  mutate(bigThan6 = +(session == max(session) &
                      toDate - date > 6))

#   c_code session date       toDate     bigThan6
#   <chr>    <dbl> <date>     <date>        <int>
# 1 a            1 2020-01-01 2020-11-09        0
# 2 a            2 2020-01-10 2020-11-09        1
# 3 b            2 2020-01-20 2020-11-09        0
# 4 b            3 2020-01-23 2020-11-09        1
# 5 c            3 2020-11-07 2020-11-09        0
# 6 c            4 2020-11-08 2020-11-09        0

任意演示日期

df <- structure(list(c_code = c("a", "a", "b", "b", "c", "c"), session = c(1, 
2, 2, 3, 3, 4), date = structure(c(18262, 18271, 18281, 18284, 
18573, 18574), class = "Date"), toDate = structure(c(18575, 18575, 
18575, 18575, 18575, 18575), class = "Date")), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))```

未经测试,因为您尚未共享数据,但我认为这就是您想要的:

your_data %>%
  group_by(c_code) %>%
  mutate(
    big_than_6 = case_when(
      date < max(date) ~ NA_integer_,
      datediff(todayDate, date, "days") > 6 ~ 1L,
      TRUE ~ 0L 
  ))