Страницы: 1 2 След.
RSS
Сопоставление данных по интервалам.
 
Здравствуйте!! Есть 2 таблицы 4 столбца (имя, от, до, и четвертый столбец надо перенести из одной таблицы в другую) и многооооооо строк в одной таблице интервал представлен в разбитым по единицам 0-1,1-2, 2-3.... и т.д. В другой таблице интервал  объединен в общий от 0-3 и вот значение из общего интервала необходимо перенести в интервал разбитый. С учетом имени в первом столбце. Необходимо сопоставить общий интервал и подставить значение, учитывая лежит ли данное значение в разбитом интервале. Спасибо..
 
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=164967&....
 
Coolllerr, сразу есть вопросы - Какое значение ставить если интервал будет от 10,50 до 10,50?
Какое если интервал от 10,40 до 11?
И главное - почему?
Ну а так вполне возможно что достаточно ВПР как в теме
про интервалы
 
Цитата
написал:
Какое значение ставить если интервал будет от 10,50 до 10,50?Какое если интервал от 10,40 до 11?И главное - почему
Интервал от 10,50 до 10,50 не должен существовать в данном массиве интервалы с разницей 0 некорректны. Ну и соответственно в интервал от 10.4 -11. 0 необходимо поставить значение из интервала от 10.0 до 23.7. Потому что интервал от 10.4 до 11.0 входит в интервал 10.0-23.7. и все значения лежащие в этом интервале должны получить код 2222 а все значения в интервале от 23.7 до 50 должны получить код 33333 и т.д.
 
Цитата
Coolllerr написал:
входит в интервал 10.0-23.7
- нет такого интервала
Цитата
Coolllerr написал:
все значения в интервале от 23.7 до 50 должны получить код 33333
- значение 23,7 и до 24 (включая или нет - отдельный вопрос) ведь в интервале
22,50 24,00 2222
чего это должно быть 33333?
 
Цитата
написал:
- нет такого интервала
этот интервал указан в правой таблицы.
Цитата
написал:
- значение 23,7 и до 24
этого интервала нет в левой таблице но если предположить что есть тогда он должен получить код 33333 потому что данный интервал лежит в пределах общего интервала из правой таблицы от 23.7-50.0
 
Coolllerr, ну с именно такими интервалами есть формула.
Интересно посмотреть как должно быть с другими...
 
Цитата
написал:
Coolllerr , ну с именно такими интервалами есть формула.Интересно посмотреть как должно быть с другими...
Весь файл 10 мб не могу загрузить вот выкипировал часть. Спасибо что отозвались но необходимо немного по другому.
 
Вообще логика формулы не меняется, перестановка местами таблиц на её работу не влияет.
Но на 10 мб конечно тяжело будет, уже на этом файле надоело ждать...

Дождался наконец..
И вот может теперь скажете какие коды и почему должны быть тут:
B2041 71 83,199997 #Н/Д
B2041 98 99 #Н/Д

Есть выбор из таких интервалов:
B2041 0 4 SED
B2041 4 9 IAB
B2041 9 78,7 IAN
B2041 78,7 98,9 TUF
B2041 98,9 175 IAN
Изменено: Hugo - 10.05.2024 17:32:03
 
Цитата
написал:
Дождался наконец..И вот может теперь скажете какой код и почему должен быть тут:B2041 98 99 #
Тут должен быть код IAN
Потому что,
B2041 98,9 175 IAN интервал от 98.9 до 175 представлен данным кодом.
 
Мы имеем скважину разбитую по интервалам опробования это таблица с левой стороны. С правой стороны таблица с кодовым описанием по литологическим разностям. и получается что интервалы опробования представлены породами из таблицы с правой стороны.
 
Первый столбец номер скважины, второй и третий интервалы опробования, четвертый код  чем представлен, и вот надо срастить данные по номеру скважины, интервалу опробования и интервалу из правой таблицы. чтобы интервалы опробования скважины такой-то брали кодировку с правой таблицы учитывая номер скважины и интервал.т.е. если скважина 1 разбитая по метру с левой стороны на 50 инт. опробования брала для каждого метрового интервала данные из правой таблицs в которой написано что от 0-25 это код ABC а от 25-50 это код ABCD
 
Цитата
Coolllerr написал:
Тут должен быть код IAN
- но первая проба не в этом интервале!
Если учитывать только последнюю - то можно:
Код
=ИНДЕКС($L$4:$L$4776;ПОИСКПОЗ(1;($I$4:$I$4776=A4)*($K$4:$K$4776>=C4);0);1)

файл не приложить - не лезет даже архивированный
Изменено: Hugo - 10.05.2024 17:47:31
 
Цитата
Цитата
написал:
B2041 71 83,199997 #Н/ДB2041 98 99 #Н/ДЕсть выбор из таких интервалов:B2041 0 4 SEDB2041 4 9 IABB2041 9 78,7 IANB2041 78,7 98,9 TUFB2041 98,9 175 IAN
Если забивать руками то она должна иметь вот такой вид.
 
Если номер скважины совпадает и интервал ОТ в левом столбце больше или равен интервалу в правом столбцу и меньше или равен интервалу до в правом столбцу тогда код в левом столбцу равен коду в правом столбцу если нет тогда сравниваем дальше. Вот у меня родилась типа какая то такая логика  
 
B2041 98 99 TUF - концепция поменялась?
А логику не понял, попробуйте переформулировать - как это
интервал ОТ в левом столбце больше или равен интервалу в правом столбцу и меньше или равен интервалу до в правом столбцу тогда код в левом столбцу равен коду в правом столбцу
и где эти ОТ/ДО и столбцы ))
Изменено: Hugo - 10.05.2024 19:01:53
 
Цитата
написал:
B2041 98 99 TUF - концепция поменялась?
В целом на переходящих не принципиально что будет стоять я просто взял чего больше ТУФ 0.9 а ИАН 0.1 ошибка будет не критическая в конкретном случае.  а в вашем первом вопросе был не внимателен извините((
 
Ну тогда формула выводящая по последнему готова, см. выше.
Но тяжело будет на больших объёмах, вводить на старых версиях тремя клавишами Ctrl+Shift+Enter
 
Цитата
написал:
А логику не понял, попробуйте переформулировать - как это интервал ОТ в левом столбце больше или равен интервалу в правом столбцу и меньше или равен интервалу до в правом столбцу тогда код в левом столбцу равен коду в правом столбцуи где эти ОТ/ДО и столбцы ))
Если в столбике i есть значение из столбика А и при этом столбик B>=J и столбик B<=K тогда D=L. Типа того но будто чего то не хватает
Изменено: Coolllerr - 10.05.2024 19:17:57
 
Цитата
написал:
Ну тогда формула выводящая по последнему готова, см. выше.Но тяжело будет на больших объёмах, вводить на старых версиях тремя клавишами Ctrl+Shift+Enter
Я конечно дико извиняюсь но что то она как то не работает.
 
Coolllerr, ну так за полчаса ещё не написали? Логика формулы ведь есть...
Код
=ИНДЕКС($L$4:$L$4776;ПОИСКПОЗ(1;($I$4:$I$4776=A4)*($J$4:$J$4776<=B4)*($K$4:$K$4776>=B4);0);1)

это третий вариант, выводит тут TUF:

B2041 98 99 #Н/Д IAN TUF
 
Цитата
написал:
Coolllerr , ну так за полчаса ещё не написали? Логика формулы ведь есть...
Я не так глуп как туп)))  
 
Цитата
написал:
Coolllerr , ну так за полчаса ещё не написали? Логика формулы ведь есть...
В общем как итог получается последняя формула работает точнее но вы оказались правы с этими вопросами про интервалы как оказалось одна формула растягивает предыдущий интервал а другая формула начинает рано следующий можете подсказать какую проверку можно еще добавить сюда.
 
сделайте "ВПР" с декартовым произведением в power query с последующей проверкой каждой границы интервала (как - указано по ссылке из такой же темы) - тогда невозможно будет ошибиться
 
Я в самом начале спрашивал что делать с интервалами которые идут через границы интервалов
Их наверное может быть и более двух... Может быть перечислять все? В принципе для двух крайних уже решение есть, можно собрать в одной ячейке, правда будет неоптимально... Да и объёмы вычислений большие... Нужно или в PQ делать, или макросом, но сперва нужно решить какой ожидаете результат и почему у таких интервалов.
 
Hugo, до 10 млн строк (навскидку, по опыту) не будет больших объемов вычислений (для PQ имеется в виду), т.е. одна таблица скажем на 2 тыс. строк Х другая на 5 тыс. строк...с такими входными данными ничего не будет тормозить, каждую строку с каждой соединить и сравнить границы, не подошедшие ни под один интервал строки -  убрать фильтром. Наверно, более опытные без join в PQ составят скрипт, циклом сравнения каким-то,  или с летучим join'ом, я не знаю как, но не думаю что будет быстрее работать.
Но мне оч. интересно было бы, чтобы кто-то написал цикл перебора со сравнением границ интервалов в PQ без join, для опыта.
Изменено: voler83 - 10.05.2024 22:56:19
 
Так я и сказал что в PQ нужно делать, у меня формулы на целый столбец еле ворочались, поэтому хоть и ленивый, но диапазоны как выше видно обрезал впритирку ))
 
Цитата
написал:
Я в самом начале спрашивал что делать с интервалами которые идут через  границы интервалов
я не совсем понял вопроса...в тот момент. Интервалов конечно более двух ,плывут границы в начале каждой скважины,и на каждой границе интервала а хотелось бы что бы границы не плыли а оставались в пределах указанных интервалах справа.кажется необходимо добавить ещё одно условие проверки по границе от и до может быть добавить условие к этому, интервал До из левой таблице должен быть <=следующему интервалу ОТ правой таблицы и если данное условие соблюдено тогда вставлять
 
А если интервал до >= следующему интервалу от тогда вставляется значение следующего кода
 
Coolllerr, т.е. имеется в виду, например, есть интервал от 80 до 100 и еще есть от 90 до 120? если да, то как определяется "старшинство" интервала? по границе От? а если есть еще интервал от 90 до 130? что-то слишком, надо тогда циклы в циклах, чтобы каждую нижнюю границу проверяло по списку всех нижних границ, а при соблюдении условия проверяло верхнюю границу по списку верхних границ, и при соблюдении условия составляло новый список верхних границ и по нему проходило - а нет ли более лучшего совпадения по верхней границе? и потом еще на цикл по верхней?.....а которая нижняя граница "лучше" - от 80 до 100 или от 90 до 120? т.е. 80 или 90 лучше?
Короче говоря, если интервалу из левой таблицы может соответствовать несколько интервалов из правой таблицы, то нужно правило, как оценивать по каждой границе интервала самое лучшее совпадение. Напр., в правой табл. есть интервал от 80 до 100, берем из левой все интервалы с нижней границей <=80, составляем список всех верхних границ таких интервалов, оставляем из списка те которые <=100 выбираем из оставшихся минимальное /максимальное ... такое должно быть правило, если я понял правильно все
Изменено: voler83 - 11.05.2024 00:08:14
Страницы: 1 2 След.
Наверх