按级别过滤并获取值
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
))
我的情况有点复杂, 我是 运行 诊所,我需要你的帮助:
我有一个因子类型为“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
))