MS Exel -
30 отговора
644 прегледа
MS Exel -
Възможно ли е в Exel да се реши следния проблем - при наличност на 12 колонки с по няколко стотин реда във всяка, клетките с 0 или 1, се налага да се разгледат всички възможни комбинации от по 2 колонки за всеки ред и да се запълни нова колонка, като съдържанието на всяка нейна клетка е броят съвпаденията за съответния ред?
Re: MS Exel -
Ъъъъ... Нещо не можах да вдяна - транспозиция ли искаш да правиш?
Ако си пробвал всичко възможно и пак не става - RTFM!
Ако си пробвал всичко възможно и пак не става - RTFM!
Re: MS Exel -
И на мен ми звучи по китайски :) Просто искам (т.е. се опитвам да помогна на човек, на който му трябва) самият Exel да изчислява такива комбинации - задавам му няколко колонки и някаква функция или нещо такова, която да прави сравненията между всички комбинации с 2 елемента между тези колонки. Признавам си, че не съм се занимавал с Exel от 3-4 години поне..
Re: MS Exel -
Бе вие се е*авате с китайците, ама алгебрата баба ми я е измислила


Е, всъщност пра-пра-пра- и т.н.
Поразгледай функциите lookup, vlookup, hlookup - те правят сравнения по зададени критерии в редове и колонки.
Ако си пробвал всичко възможно и пак не става - RTFM!
Поразгледай функциите lookup, vlookup, hlookup - те правят сравнения по зададени критерии в редове и колонки.
Ако си пробвал всичко възможно и пак не става - RTFM!
Re: MS Exel -
Специално за VLookup не те съветвам да я използваш - мноооого е бавна.
Дай сега да видим какво точно е целта на занятието. Имаме 12 колонки с 0 и 1, нещо като:
0 1 1 1 0 1 0 0 1 1 0 1
Не разбрах сега какво трябва да се получи в новата колконка, броя на кои съвпадения? 4 ли трябва да се запише? ( 1 1 1 са две съвпадения 0 0 още едно и 1 1 още едно? )
Дай сега да видим какво точно е целта на занятието. Имаме 12 колонки с 0 и 1, нещо като:
0 1 1 1 0 1 0 0 1 1 0 1
Не разбрах сега какво трябва да се получи в новата колконка, броя на кои съвпадения? 4 ли трябва да се запише? ( 1 1 1 са две съвпадения 0 0 още едно и 1 1 още едно? )
Re: MS Exel -
аз не разбрах много добре въпроса, НО можеш да използваш и функцията IF.
Другата e VLKOOP хич не е за подценяване, и НЕ е бавна.
.xls
Другата e VLKOOP хич не е за подценяване, и НЕ е бавна.
.xls
Re: MS Exel -
Идеята, до колкото я разбирам аз, е - минаваш последователно през всички колонки и за всяка от тях разглеждаш всичките й възможни комбинации с друга колонка; и върху тези комбинации трупаш брояча. Т.е. за твоя пример - взимаш първата колонка - 0 - при сравнение с другите колонки ще намериш 4 съвпадения; взимаш 2-та - 1 - 6 съвпадения; значи дотук общо 10; и т.н.
...
Което излиза, че всъщност трябва да се смята функция при n единици и k нули
f(n,k) = n*(n-1) + k*(k-1)
В конкретния случай: k = 12 - n
...
Въпросът тогава е как да дефинирам фукнция, която да брои единиците в колонките и върху резултат да смята горната f(n,k).
И пак казвам, твърде далеч съм от Exel-а по принцип, така че може и това да е нещо елементарно без да го знам.
...
Което излиза, че всъщност трябва да се смята функция при n единици и k нули
f(n,k) = n*(n-1) + k*(k-1)
В конкретния случай: k = 12 - n
...
Въпросът тогава е как да дефинирам фукнция, която да брои единиците в колонките и върху резултат да смята горната f(n,k).
И пак казвам, твърде далеч съм от Exel-а по принцип, така че може и това да е нещо елементарно без да го знам.
Re: MS Exel -
Е, да. Те простите неща са трудни за досещане :). Нали броят единици си е всъщност сумата от клетките..
грешка
Не е било това, грешката си е моя, просто не съм разбрал правилно. Изходът трябва да е всъщност матрица 12 x 12 (за всяка комбинация между 2 колонки), и при сравнение на 2 колонки се гледа колко съвпадения между съответните им клетки има..
Re: грешка
Съвсем се оплетох...дай едно примерче, че да се разберем.
По принцип ако имаш сравнения между две клетки които съдържат само 0 и 1 то резулата ще е NOT ( a XOR b ) - или казано по друг начин това е едно съвпадение.
За матрица 12х12 ще имаш ( (n^2 )/2 - n ) възможни резулатата без да се вземат под внимание огледалните такива. Сумата от тях ли ти трябва или какво? Ако не е сумата виж горната формулка която ти написах за сравнение и я размножи, а ако ти трябва сумата... добави едно SUM пред същата формула....
Но мразя да правя догадки затова дай едно елементарно примерче, че да видим какво точно трябва да се получи!
По принцип ако имаш сравнения между две клетки които съдържат само 0 и 1 то резулата ще е NOT ( a XOR b ) - или казано по друг начин това е едно съвпадение.
За матрица 12х12 ще имаш ( (n^2 )/2 - n ) възможни резулатата без да се вземат под внимание огледалните такива. Сумата от тях ли ти трябва или какво? Ако не е сумата виж горната формулка която ти написах за сравнение и я размножи, а ако ти трябва сумата... добави едно SUM пред същата формула....
Но мразя да правя догадки затова дай едно елементарно примерче, че да видим какво точно трябва да се получи!
Re: MS Exel -
Значи сравняваш полето в 1 с 2,3,4,5 и т.н. после 2 с 1,3,4,5 и т.н.
демек в 13 колона трябва да имаш число равно на броя случаи в които стоиностите при всяко сравнение са равни...
ето какво измислих при опит с 4 колонки:
=SUM((IF(A1<>B1;0;1));(IF(A1<>C1;0;1));(IF(A1<>D1;0;1));(IF(B1<>C1;0;1));(IF(B1<>D1;0;1));(IF(C1<>D1;0;1)))
сравнявам всяка клетка с следващите я (с предишните е сравнена вече при предните ИФ ове).
Welcome to the real world
демек в 13 колона трябва да имаш число равно на броя случаи в които стоиностите при всяко сравнение са равни...
ето какво измислих при опит с 4 колонки:
=SUM((IF(A1<>B1;0;1));(IF(A1<>C1;0;1));(IF(A1<>D1;0;1));(IF(B1<>C1;0;1));(IF(B1<>D1;0;1));(IF(C1<>D1;0;1)))
сравнявам всяка клетка с следващите я (с предишните е сравнена вече при предните ИФ ове).
Welcome to the real world
Re: MS Exel -
Що ме караш да се смея на глас? Еднична кръстосана заявка през куерито върви 10 пъти по-бързо отколкото VLOOKUP.
Мога да ти пратя примерна тестова табличка, че да видиш за какво иде реч. 12000 записа за да ми ги кръстоса му трябват ~5 мин на 512Мб с 1.6 процесор... Да прав си че не е бавна - мудна е!!!
Мога да ти пратя примерна тестова табличка, че да видиш за какво иде реч. 12000 записа за да ми ги кръстоса му трябват ~5 мин на 512Мб с 1.6 процесор... Да прав си че не е бавна - мудна е!!!
Re: MS Exel -
Спеси си два IF-а като при изпълнено добавяй 2 а не едно защото
SUM( ( IF(X<>Y;0;1) ); ( IF(Y<>X;0;1) ) ) = SUM ( ( IF(X<>Y;0;2) ) )
SUM( ( IF(X<>Y;0;1) ); ( IF(Y<>X;0;1) ) ) = SUM ( ( IF(X<>Y;0;2) ) )
Re: грешка
ОК. Значи съвпадение по единици. Имам си там 12 колонки, изходът ще е в матричен вид - 12 x 12, симетричен спрямо главния диагонал. Сравняваме колонка i с колонка j :
i j
0 1
1 1
0 1
1 0
1 1
0 0
Значи в примера имаме 2 съвпадения. Клетките, отоговарящи на (i,j) и (j,i) в резултата ще получат стойност 2. Това е.
i j
0 1
1 1
0 1
1 0
1 1
0 0
Значи в примера имаме 2 съвпадения. Клетките, отоговарящи на (i,j) и (j,i) в резултата ще получат стойност 2. Това е.
Re: грешка
Ще ти пренапиша примера
1 2
1 0 1
2 1 1
3 0 1
4 1 0
5 1 1
6 0 0
Какво се получва - имаме съвпадение на ред 2 и ред 5 значи общо две за първата колона или резултата трябва да е:
1 2
1 0 2
2 2 0
и т.н? Хм! Няма да стане просто и елегантно - тази матрица оплете нещата. Виж какво е написал Морфиус но го направи за сума от две клетки - само дето ще ти се наложи да го пишеш 60 пъти - поне за едната от двете симетични части! Ще помисля още но щом веднага не ми хрумна нещо по-елегнатно..не разчитай много!
1 2
1 0 1
2 1 1
3 0 1
4 1 0
5 1 1
6 0 0
Какво се получва - имаме съвпадение на ред 2 и ред 5 значи общо две за първата колона или резултата трябва да е:
1 2
1 0 2
2 2 0
и т.н? Хм! Няма да стане просто и елегантно - тази матрица оплете нещата. Виж какво е написал Морфиус но го направи за сума от две клетки - само дето ще ти се наложи да го пишеш 60 пъти - поне за едната от двете симетични части! Ще помисля още но щом веднага не ми хрумна нещо по-елегнатно..не разчитай много!
Re: грешка
А някой дали ще намери няколко минути време да ми покаже накратко какво начално състояние имаме, и какъв резултат трябва да се получи?
Със по-малко данни де, не е задължително да ми се показват 10000 реда с единици и нули...
П.П. Това може да послужи за пример:
Щирлиц
Със по-малко данни де, не е задължително да ми се показват 10000 реда с единици и нули...
П.П. Това може да послужи за пример:
A B C D E F G H I J K L
1 1 0 0 0 1 1 1 0 1 0 1 1 = ?
2 0 0 1 0 1 1 0 1 1 0 0 1 = ?
3 1 0 1 1 1 1 0 0 1 0 1 1 = ?
4 0 0 1 0 1 0 1 1 1 0 0 0 = ?
5 0 0 1 0 1 1 1 0 0 1 0 1 = ?
6 1 1 1 1 0 1 0 0 1 1 0 0 = ?
7 0 0 0 0 0 1 1 0 0 1 0 0 = ?
8 1 0 0 1 1 1 0 1 1 0 1 0 = ?
9 0 1 0 1 0 1 1 0 1 0 0 0 = ?
10 1 1 0 0 0 0 1 0 1 1 0 1 = ?
11 0 0 1 0 1 0 0 0 1 0 1 1 = ?
12 0 1 0 1 1 0 1 1 1 0 1 0 = ?
Щирлиц
Редактирано от Щиpлиц на
Re: грешка
Доколкото разбирам аз резулатата не е по редове а по колони..
Вземаш колона A и В и сравняваш ред по ред като колоната сравнена сама със себе си винаги дава нула. Или в нашия случай имаме А сравнено с В ( при първоначалното условие да се търси съвпадение а не логическо И както беше в по-горния пример ) то имаме 7 съвпадения ( редове 2,4,5,6,7,10,11 ) или в резултантната матрица на позиция АВ ще имаме 7! Тук вече се разбрахме, че тя ще е симетрична спрямо диагонала си така че няма нужда да се прави същото и за ВА - т.е трябва само да се нанесе същия резулатат в позицията или след проверката на колона А с В имаме
А В С D E ....
А 0 7
В 7 0
C
D
E
...
Сравняваме B с C ( редове 1,6,7,8 ), резултата е 4 съвпадения и попълваме...
А В С D E ....
А 0 7
В 7 0 4
C 4 0
D
E
...
А с С не ми се сравнява сега но резултата трябва да е 5 на пръв поглед или
А В С D E ....
А 0 7 5
В 7 0 4
C 5 4 0
D
E
...
Нещо такова - ако съм разбрал правилно идеята!
Вземаш колона A и В и сравняваш ред по ред като колоната сравнена сама със себе си винаги дава нула. Или в нашия случай имаме А сравнено с В ( при първоначалното условие да се търси съвпадение а не логическо И както беше в по-горния пример ) то имаме 7 съвпадения ( редове 2,4,5,6,7,10,11 ) или в резултантната матрица на позиция АВ ще имаме 7! Тук вече се разбрахме, че тя ще е симетрична спрямо диагонала си така че няма нужда да се прави същото и за ВА - т.е трябва само да се нанесе същия резулатат в позицията или след проверката на колона А с В имаме
А В С D E ....
А 0 7
В 7 0
C
D
E
...
Сравняваме B с C ( редове 1,6,7,8 ), резултата е 4 съвпадения и попълваме...
А В С D E ....
А 0 7
В 7 0 4
C 4 0
D
E
...
А с С не ми се сравнява сега но резултата трябва да е 5 на пръв поглед или
А В С D E ....
А 0 7 5
В 7 0 4
C 5 4 0
D
E
...
Нещо такова - ако съм разбрал правилно идеята!
Re: MS Exel -
Прегледай пак формулата, имаш х1 х2 х3 до х12 сравнявам 1 с 2 - 12, 2 с 3 - 12 и т.н. така, че нямам инверсия на променливите за да удвоявам.
Welcome to the real world
Welcome to the real world
Re: грешка
Абе, аз да си кажа, отново нищо не схванах. Може би ми липсва опита в висша математика, ако това въобще има нещо общо с нея.
Чета условието: "комбинации от по 2 колонки за всеки ред и да се запълни нова колонка"... и от него разбирам, че правим сравнение между колоните "А" до "L", и попълваме с резултата колона "М" - за всеки ред. Също така май по условие не се споменава, че матрицата е симетрична.
...
П.П. За да не се разместват текстовете след постването, може да бъдат заградени с "тагове" ето така:
[prе]
Текст
[/prе]
таговете се пишат на латиница. И тогава в постинга ще се получат във вид както изглеждат в Notepad.
Щирлиц
Чета условието: "комбинации от по 2 колонки за всеки ред и да се запълни нова колонка"... и от него разбирам, че правим сравнение между колоните "А" до "L", и попълваме с резултата колона "М" - за всеки ред. Също така май по условие не се споменава, че матрицата е симетрична.
...
П.П. За да не се разместват текстовете след постването, може да бъдат заградени с "тагове" ето така:
[prе]
Текст
[/prе]
таговете се пишат на латиница. И тогава в постинга ще се получат във вид както изглеждат в Notepad.
Щирлиц