代码之家  ›  专栏  ›  技术社区  ›  B. Davis

使用ifelse和dplyr维护POSIXct时间格式

  •  1
  • B. Davis  · 技术社区  · 8 年前

    下面的数据有两个人的观察日期。

        dat <- structure(list(GenIndID = c("BHS_034", "BHS_034", "BHS_068", 
    "BHS_068", "BHS_068", "BHS_068", "BHS_068", "BHS_068", "BHS_068", 
    "BHS_068", "BHS_068"), IndID = c("BHS_034_A", "BHS_034_A", "BHS_068_A", 
    "BHS_068_A", "BHS_068_A", "BHS_068_A", "BHS_068_A", "BHS_068_A", 
    "BHS_068_A", "BHS_068_A", "BHS_068_A"), Fate = c("Mort", "Mort", 
    "Alive", "Alive", "Alive", "Alive", "Alive", "Alive", "Alive", 
    "Alive", "Alive"), SurveyID = c("GYA13-1", "GYA14-1", "GYA13-1", 
    "GYA14-1", "GYA14-2", "GYA15-1", "GYA16-1", "GYA16-2", "GYA17-1", 
    "GYA17-3", "GYA15-2"), SurveyDt = structure(c(1379570400, 1407477600, 
    1379570400, 1407477600, 1409896800, NA, 1462946400, 1474351200, 
    1495519200, 1507010400, 1441951200), tzone = "", class = c("POSIXct", 
    "POSIXt"))), row.names = c(NA, 11L), .Names = c("GenIndID", "IndID", 
    "Fate", "SurveyID", "SurveyDt"), class = "data.frame")
    
      > dat
       GenIndID     IndID  Fate SurveyID   SurveyDt
    1   BHS_034 BHS_034_A  Mort  GYA13-1 2013-09-19
    2   BHS_034 BHS_034_A  Mort  GYA14-1 2014-08-08
    3   BHS_068 BHS_068_A Alive  GYA13-1 2013-09-19
    4   BHS_068 BHS_068_A Alive  GYA14-1 2014-08-08
    5   BHS_068 BHS_068_A Alive  GYA14-2 2014-09-05
    6   BHS_068 BHS_068_A Alive  GYA15-1       <NA>
    7   BHS_068 BHS_068_A Alive  GYA16-1 2016-05-11
    8   BHS_068 BHS_068_A Alive  GYA16-2 2016-09-20
    9   BHS_068 BHS_068_A Alive  GYA17-1 2017-05-23
    10  BHS_068 BHS_068_A Alive  GYA17-3 2017-10-03
    11  BHS_068 BHS_068_A Alive  GYA15-2 2015-09-11
    

    SurveyDt列的格式为 POSIXct 时间戳。我正试图总结在 GenIndID 与分组 dplyr . 在下面的代码中,我使用 dplyr AAA <NA> 当max函数使用 na.rm = F 论点对于 BBB NA <NA> 首选)。

    dat %>% group_by(GenIndID) %>%
      mutate(AAA =  max(SurveyDt, na.rm = FALSE),
             BBB =  ifelse(Fate == "Alive", max(SurveyDt, na.rm = F), NA)) %>%
      as.data.frame()
    
    GenIndID     IndID  Fate SurveyID   SurveyDt        AAA BBB
    1   BHS_034 BHS_034_A  Mort  GYA13-1 2013-09-19 2014-08-08  NA
    2   BHS_034 BHS_034_A  Mort  GYA14-1 2014-08-08 2014-08-08  NA
    3   BHS_068 BHS_068_A Alive  GYA13-1 2013-09-19       <NA>  NA
    4   BHS_068 BHS_068_A Alive  GYA14-1 2014-08-08       <NA>  NA
    5   BHS_068 BHS_068_A Alive  GYA14-2 2014-09-05       <NA>  NA
    6   BHS_068 BHS_068_A Alive  GYA15-1       <NA>       <NA>  NA
    7   BHS_068 BHS_068_A Alive  GYA16-1 2016-05-11       <NA>  NA
    8   BHS_068 BHS_068_A Alive  GYA16-2 2016-09-20       <NA>  NA
    9   BHS_068 BHS_068_A Alive  GYA17-1 2017-05-23       <NA>  NA
    10  BHS_068 BHS_068_A Alive  GYA17-3 2017-10-03       <NA>  NA
    11  BHS_068 BHS_068_A Alive  GYA15-2 2015-09-11       <NA>  NA
    > 
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Nimantha Thatkookooguy    4 年前
    dat %>% group_by(GenIndID) %>%
      mutate(AAA =  max(SurveyDt, na.rm=T),
             BBB =  as.POSIXct(ifelse(Fate == "Alive", max(SurveyDt, na.rm=T), NA), origin='1970-01-01', na.rm=T)) %>%
      as.data.frame()
    
    推荐文章