在动态范围R中找到最高数字

时间:2018-02-04 22:27:27

标签: r

我在按时间顺序排序的df中有一列,表示将来遇到某个触发条件时df中的观察(或行号),例如df$condition_met <- c(NA, NA, 61, NA, ...) - 即df的第三行是满足条件的第一行,并且在第61行中满足。(我不确定您是否需要此上下文!)

我想在行号(在此示例中为df$high)之后的行与满足条件之前的行之间的行之间找到不同列(3+1)中的最大值(在此示例中为60。)

非常感谢任何帮助!

1 个答案:

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