我有三个日期d1,d2,d3(有可能他们可能是NA)
id <- c(1,2,3,4,5,6)
d1 <- c("09/30/2000", "","02/30/2000", "05/10/2003", "", "")
d1 <- as.Date(d1, "%m/%d/%y")
d2 <- c("6/30/2014", "6/15/2014","", "8/6/2011", "", "6/30/2014")
d2 <- as.Date(d2, "%m/%d/%y")
d3 <- c("9/5/2015", "9/2/2015","7/5/2015", "", "", "")
d3 <- as.Date(d3, "%m/%d/%y")
mdata <- data.frame(id,d1,d2,d3)
id date1 date2 date3
1 9/30/2000 6/30/2014 9/5/2015
2 6/15/2014 9/2/2015
3 02/30/2000 7/5/2015
4 5/10/2003 8/6/2011
5
6 6/30/2014
我需要创建一个新的var&#34; maxdate&#34;这是d1,d2,d3中的最大日期。如果d1是NA,那么 maxdate = max(d2,d3)。如果所有d1,d2,d3都是NA,那么maxdate = NA。
这是输出:
id date1 date2 date3 maxdate
1 9/30/2000 6/30/2014 9/5/2015 9/5/2015
2 6/15/2014 9/2/2015 9/2/2015
3 02/30/2000 7/5/2015 7/5/2015
4 5/10/2003 8/6/2011 8/6/2011
5 NA
6 6/30/2014 6/30/2014
答案 0 :(得分:1)
mdata$maxdate = Reduce(function(x, y) pmax(x, y, na.rm = T), mdata[,-1])
答案 1 :(得分:1)
或apply
mdata$maxdate <- apply(mdata[-1], 1, max, na.rm=T)
# id d1 d2 d3 maxdate
# 1 1 2020-09-30 2020-06-30 2020-09-05 2020-09-30
# 2 2 <NA> 2020-06-15 2020-09-02 2020-09-02
# 3 3 <NA> <NA> 2020-07-05 2020-07-05
# 4 4 2020-05-10 2020-08-06 <NA> 2020-08-06
# 5 5 <NA> <NA> <NA> <NA>
# 6 6 <NA> 2020-06-30 <NA> 2020-06-30