首页 > 解决方案 > 在第一个 NA 之后和最后一个 NA 之前取每一行的最小日期/值?

问题描述

我试图在该序列之前的所有 NA 之后的日期序列中取最小日期,并且该序列之后的唯一内容是 NA,或者该日期序列是最后一列。

这可以通过示例更好地解释:

sample <- data.frame(subject = c("A","B","C"),Date1 = c("1-2-19","1-2-19",NA),Date2 = c("1-3-19",NA,"1-3-19"),Date3 = c("1-4-19","1-4-19",NA)
           ,Date4 = c(NA,"1-5-19",NA),Date5 = c("1-6-19",NA,NA),Date6 = c("1-7-19",NA,"1-7-19"))

输出:

subject  Date1  Date2  Date3  Date4  Date5  Date6
1       A 1-2-19 1-3-19 1-4-19   <NA> 1-6-19 1-7-19
2       B 1-2-19   <NA> 1-4-19 1-5-19   <NA>   <NA>
3       C   <NA> 1-3-19   <NA>   <NA>   <NA> 1-7-19

希望的结果是有一个名为 Minimum_Date 的附加列,其中输入了每一行的预期结果。

所以主题 A 会返回 '1-6-19'

对象 B 会返回“1-4-19”

对象 C 会返回“1-7-19”

标签: r

解决方案


这是一个选项base R

sample$minDate <- apply(sample[-1], 1, function(x) {
       i1 <- which(!is.na(x))
       mx <- cumsum(c(TRUE, diff(i1) != 1))
       x1 <- x[i1[mx == max(mx)]]
       x1[which.min(as.Date(x1, "%m-%d-%y"))]})
sample$minDate
#[1] "1-6-19" "1-4-19" "1-7-19"

推荐阅读