R

时间:2015-09-08 20:34:49

标签: r

我有三个日期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

2 个答案:

答案 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