我在按时间顺序排序的df
中有一列,表示将来遇到某个触发条件时df
中的观察(或行号),例如df$condition_met <- c(NA, NA, 61, NA, ...)
- 即df
的第三行是满足条件的第一行,并且在第61行中满足。(我不确定您是否需要此上下文!)
我想在行号(在此示例中为df$high
)之后的行与满足条件之前的行之间的行之间找到不同列(3+1
)中的最大值(在此示例中为60
。)
非常感谢任何帮助!
答案 0 :(得分:0)
这应该做你想要的,以及对Infinity的检查:
max_val
变量!is.na(condition_met)
是您的答案。
多个单元满足max_val_and_index <- function(df, i) {
if (is.na(df$condition_met[i])) {
max_val <- NA
index <- NA
} else {
high_row_num <- min(df[i, "condition_met"], nrow(df))
max_val <- max(df$high[(i+1):high_row_num])
index <- which.max(df$high[(i+1):high_row_num]) + i
}
result <- c("max_val" = max_val, "index" = index)
}
的情况的解决方案:
> df
condition_met high
1: 4 4
2: NA 1
3: 8 2
4: NA 3
5: NA 4
6: 8 1
7: Inf 5
8: NA 3
9: NA 4
> sapply(1:nrow(df), function(x) max_val_and_index(df, x))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
max_val 3 NA 5 NA NA 5 4 NA NA
index 4 NA 7 NA NA 7 9 NA NA
示例用法:
{{1}}