1
下面的數據有兩個人的觀察日期。使用ifelse和dplyr維護POSIXct時間格式
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>
爲第二個人生產時,最大功能使用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
>
非常感謝@Prem。爲什麼爲BBB添加'as.POSIXct'包裝會改變AAA的結果? –
@ B.Davis很高興它幫助!按照您的要求,AAA列對於每個GenIndID組具有最大的SurveyDt,對於Fate == Alive只有'BBB'列具有最大的SurveyDt。這裏添加了'as.POSIXct',因爲'BBB'中的'ifelse'條件將時間轉換爲UNIX曆元,但所需的輸出格式不同。 – Prem