我想获取组中另一列具有特定值的最大日期。在特定示例中,我想提取group
中所有日期的最大值date
,其中status == "inactive"
。如果没有status==inactive的日期,则应返回NA。
我得到了下面的代码工作,但也得到了一个警告消息,我不完全理解为什么:
# Create sample data
df <- data.frame(
group = c("A", "A", "B", "B"),
date = as.Date(c("2022-01-01", "2022-02-01", "2022-03-01", "2022-04-01")),
status = c("active", "inactive", "active", "active")
)
# Mutate data to get maximum date by group for rows where status is "inactive"
df %>%
group_by(group) %>%
mutate(max_date = max(date[status=="inactive"]))
df %>%
group_by(group) %>%
mutate(max_date = dplyr::if_else(any(status=="inactive"),
max(date[status=="inactive"]),
NA_Date_))
这将返回以下警告消息:
Problem while computing `max_date = dplyr::if_else(...)`.
ℹ no non-missing arguments to max; returning -Inf
ℹ The warning occurred in group 2: group = "B".
第二种方法正确地返回NA值,但是为什么我会得到警告消息,因为max(date)
-函数只应该在满足if_else
语句的条件时使用/执行?当然我可以静音或忽略警告。
2条答案
按热度按时间iq0todco1#
使用
if/else
可以使它工作。if_else
在评估condition
之前评估true
和false
(如Darren Tsai所解释的),这解释了为什么会收到警告。ldioqlga2#
使用
fmax