使用NA值找到POSIXct日期的最小或最大

时间:2018-08-16 22:43:51

标签: r dplyr max min lubridate

下面的数据中有{ID(1)}和Date的ID列。

Fate

对于每个ID,我想创建一个新列来表示 ID Date Fate 1 BHS_1149 2017-04-11 MIA 2 BHS_1154 <NA> <NA> 3 BHS_1155 <NA> <NA> 4 BHS_1156 <NA> <NA> 5 BHS_1157 <NA> Mort 6 BHS_1159 2017-04-11 Alive 7 BHS_1169 2017-04-11 Alive 8 BHS_1259 <NA> <NA> 9 BHS_1260 <NA> <NA> 10 BHS_1262 2017-04-11 MIA 11 BHS_1262 2017-07-05 Alive 12 BHS_1262 2017-12-06 Alive 13 BHS_1262 2017-12-06 MIA 14 BHS_1262 2018-01-17 Mort 有效时的最小值Date或最大值Date。如果在以下代码中包含和排除了Fate参数,我已经尝试了不同的组合,但是仍然收到以下警告。

na.rm = T

代码似乎按预期工作,但是我无法理解或避免错误,并且尽管通过library(tidyverse) library(lubridate) dat %>% group_by(ID) %>% mutate( #the first or min of Date FstSurvey = min(Date), LstAlive = max(Date[Fate == "Alive"])) %>% as.data.frame() ID Date Fate FstSurvey LstAlive 1 BHS_1149 2017-04-11 MIA 2017-04-11 <NA> 2 BHS_1154 <NA> <NA> <NA> <NA> 3 BHS_1155 <NA> <NA> <NA> <NA> 4 BHS_1156 <NA> <NA> <NA> <NA> 5 BHS_1157 <NA> Mort <NA> <NA> 6 BHS_1159 2017-04-11 Alive 2017-04-11 2017-04-11 7 BHS_1169 2017-04-11 Alive 2017-04-11 2017-04-11 8 BHS_1259 <NA> <NA> <NA> <NA> 9 BHS_1260 <NA> <NA> <NA> <NA> 10 BHS_1262 2017-04-11 MIA 2017-04-11 2017-12-06 11 BHS_1262 2017-07-05 Alive 2017-04-11 2017-12-06 12 BHS_1262 2017-12-06 Alive 2017-04-11 2017-12-06 13 BHS_1262 2017-12-06 MIA 2017-04-11 2017-12-06 14 BHS_1262 2018-01-17 Mort 2017-04-11 2017-12-06 Warning messages: 1: In max.default(numeric(0), na.rm = FALSE) : no non-missing arguments to max; returning -Inf 2: In max.default(numeric(0), na.rm = FALSE) : no non-missing arguments to max; returning -Inf max帮助页面也无法找到解决方案。可复制的代码包括在下面。

min

1 个答案:

答案 0 :(得分:1)

我也喜欢写不会给我错误的代码。这是有关如何在没有警告的情况下进行相同计算的建议。通过使用有序的第一最后而不是 min max ,您不会得到r解释max( NULL)变为Inf。

dat %>% 
  group_by(ID) %>%
  mutate(FstSurvey = first(Date, 
                     order_by = Date),
         LstAlive  = last(Date[Fate == "Alive"], 
                     order_by = Date[Fate == "Alive"]))