r - 在第一个 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”
解决方案
这是一个选项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"
推荐阅读
- asp.net - 将用户数据保存到 DB Visual Studio
- android - 计算距离点的纬度/经度 X 英里?
- java - 无法在两个方法中传递 try catch 块返回值
- c++ - 如何在 C++ 中创建特定大小的消息以通过 UDP 套接字发送?
- java - 运行代码时的 java.lang.ThreadDeath 错误消息
- react-native - 仅当我移动手指时才允许 Panresponder 反应原生
- android - 如何务实地为应用程序创建一个叠加层作为Android中的水印?
- java - 如何关闭两个标签并打开具有不同网址的新标签
- java - 如何在删除时使用 mockito 制作 JUnit
- python - `plotly.subplots.make_subplots`中`specs`的意外行为