Excel 2013
У меня большой набор выходных данных модели (215 тыс. Строк). Столбец A - это юлианская дата с шагом примерно в 2 часа, столбец B - это глубина приблизительно на 0,6 м глубины, но с переменной начальной глубиной ((Может быть 0.1, 0.7, 1.3...
или может быть 0.05, .65, 1.25....
или может начинаться с другого небольшого значения)
Данные сгруппированы по дате в порядке возрастания, а затем по глубине в порядке возрастания. Для каждой даты всегда одинаковое количество глубин, но их точные значения немного различаются. Я хочу сравнить строки для каждой даты, которые являются ближайшими к моей дате калибровки, которые были собраны на глубинах 1,5, 3, 6, 12, 18 и 55.
Одна мысль состоит в том, чтобы создать столбец C, который указывает, какая строка содержит значение в поле глубины, ближайшем к одной из нескольких ключевых глубин среди всех измерений в одну и ту же дату.
Для этого объяснения представьте, что я хочу найти строки с глубиной, близкой к 1,5 и 3:
ColA ColB ColC
70.001 0.322 -
70.001 0.949 -
70.001 1.559 1.5 <--Selected because 1.559 is closer to 1.5 than is any other depth with date=70.001
70.001 2.169 -
70.001 2.779 3 <--Selected because 1.2.779 is closer to 3 than is any other depth with date=70.001
70.001 3.389 -
70.001 3.999 -
[54 rows trimmed]
70.084 0.443 -
70.084 1.191 -
70.084 1.801 1.5
70.084 2.411 -
70.084 3.021 3
70.084 3.631 -
70.084 4.241 -
70.084 4.851 -
[54 rows trimmed]
70.167 0.382 -
70.167 1.069 -
70.167 1.679 1.5
70.167 2.289 -
70.167 2.899 3
70.167 3.509 -
70.167 4.119 -
70.167 4.729 -
[54 rows trimmed]
70.25 0.485 -
70.25 1.276 1.5
70.25 1.886 -
70.25 2.496 -
70.25 3.106 3
70.25 3.716 -
70.25 4.326 -
70.25 4.936 -
[215200 rows trimmed]
У меня есть формула, которая работает. Вот версия, которая будет просто определять глубину, ближайшую к 1,5: (версия для строки 6)IF(AND(ABS(B6-1.5)<1,ABS(B6-1.5)<ABS(B7-1.5),ABS(B6-1.5)<ABS(B5-1.5)),1.5, "")
По сути, если глубина данной строки меньше 1 от 1,5, а она ближе к 1,5, чем предыдущая или следующая строка, мы получаем удар. Это работает нормально, но если я настроил вложение, чтобы выбрать другие ключевые глубины, я получу очень длинную формулу:
=IF(AND(ABS(B6-1.5)<1,ABS(B6-1.5)<ABS(B7-1.5),ABS(B6-1.5)<ABS(B5-1.5)),1.5, IF(AND(ABS(B6-3)<1,ABS(B6-3)<ABS(B7-3),ABS(B6-3)<ABS(B5-3)),3, IF(AND(ABS(B6-6)<1,ABS(B6-6)<ABS(B7-6),ABS(B6-6)<ABS(B5-6)),6, IF(AND(ABS(B6-12)<1,ABS(B6-12)<ABS(B7-12),ABS(B6-12)<ABS(B5-12)),12, IF(AND(ABS(B6-18)<1,ABS(B6-18)<ABS(B7-18),ABS(B6-18)<ABS(B5-18)),18, IF(AND(ABS(B6-30)<1,ABS(B6-30)<ABS(B7-30),ABS(B6-30)<ABS(B5-30)),30, IF(AND(ABS(B6-55)<1,ABS(B6-55)<ABS(B7-55),ABS(B6-55)<ABS(B5-55)),55,"")))))))
Эта формула работает, но она очень уродливая и немного медленная для вычисления. Я пишу, потому что мне интересно, есть ли у кого-нибудь идея для более элегантного и / или более эффективного подхода.