MS Exel -

30 отговора 644 прегледа
#1

MS Exel -

Възможно ли е в Exel да се реши следния проблем - при наличност на 12 колонки с по няколко стотин реда във всяка, клетките с 0 или 1, се налага да се разгледат всички възможни комбинации от по 2 колонки за всеки ред и да се запълни нова колонка, като съдържанието на всяка нейна клетка е броят съвпаденията за съответния ред?

Отговор
в отговор на Toto_BG #2

Re: MS Exel -

Ъъъъ... Нещо не можах да вдяна - транспозиция ли искаш да правиш?

Ако си пробвал всичко възможно и пак не става - RTFM!
Отговор
в отговор на kитaeцa #3

Re: MS Exel -

И на мен ми звучи по китайски :) Просто искам (т.е. се опитвам да помогна на човек, на който му трябва) самият Exel да изчислява такива комбинации - задавам му няколко колонки и някаква функция или нещо такова, която да прави сравненията между всички комбинации с 2 елемента между тези колонки. Признавам си, че не съм се занимавал с Exel от 3-4 години поне..

Отговор
в отговор на Toto_BG #4

Re: MS Exel -

Бе вие се е*авате с китайците, ама алгебрата баба ми я е измислила Е, всъщност пра-пра-пра- и т.н.
Поразгледай функциите lookup, vlookup, hlookup - те правят сравнения по зададени критерии в редове и колонки.

Ако си пробвал всичко възможно и пак не става - RTFM!
Отговор
в отговор на kитaeцa #5

Re: MS Exel -

Мерси. Ще го имам в предвид. :)

Отговор
в отговор на Toto_BG #6

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 още едно? )

Отговор
в отговор на Toto_BG #7

Re: MS Exel -

аз не разбрах много добре въпроса, НО можеш да използваш и функцията IF.
Другата e VLKOOP хич не е за подценяване, и НЕ е бавна.

.xls
Отговор
в отговор на . #8

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-а по принцип, така че може и това да е нещо елементарно без да го знам.

Отговор
в отговор на Toto_BG #9

Re: MS Exel -

Е, да. Те простите неща са трудни за досещане :). Нали броят единици си е всъщност сумата от клетките..

Отговор
в отговор на Toto_BG #10

грешка

Не е било това, грешката си е моя, просто не съм разбрал правилно. Изходът трябва да е всъщност матрица 12 x 12 (за всяка комбинация между 2 колонки), и при сравнение на 2 колонки се гледа колко съвпадения между съответните им клетки има..

Отговор
в отговор на Toto_BG #11

Re: грешка

Съвсем се оплетох...дай едно примерче, че да се разберем.
По принцип ако имаш сравнения между две клетки които съдържат само 0 и 1 то резулата ще е NOT ( a XOR b ) - или казано по друг начин това е едно съвпадение.
За матрица 12х12 ще имаш ( (n^2 )/2 - n ) възможни резулатата без да се вземат под внимание огледалните такива. Сумата от тях ли ти трябва или какво? Ако не е сумата виж горната формулка която ти написах за сравнение и я размножи, а ако ти трябва сумата... добави едно SUM пред същата формула....
Но мразя да правя догадки затова дай едно елементарно примерче, че да видим какво точно трябва да се получи!

Отговор
в отговор на Toto_BG #12

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
Отговор
в отговор на kibik #13

Re: MS Exel -

Що ме караш да се смея на глас? Еднична кръстосана заявка през куерито върви 10 пъти по-бързо отколкото VLOOKUP.
Мога да ти пратя примерна тестова табличка, че да видиш за какво иде реч. 12000 записа за да ми ги кръстоса му трябват ~5 мин на 512Мб с 1.6 процесор... Да прав си че не е бавна - мудна е!!!

Отговор
в отговор на Mopфиyc #14

Re: MS Exel -

Спеси си два IF-а като при изпълнено добавяй 2 а не едно защото
SUM( ( IF(X<>Y;0;1) ); ( IF(Y<>X;0;1) ) ) = SUM ( ( IF(X<>Y;0;2) ) )

Отговор
в отговор на . #15

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. Това е.

Отговор
в отговор на Toto_BG #16

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 пъти - поне за едната от двете симетични части! Ще помисля още но щом веднага не ми хрумна нещо по-елегнатно..не разчитай много!

Отговор
в отговор на . #17

Re: грешка

А някой дали ще намери няколко минути време да ми покаже накратко какво начално състояние имаме, и какъв резултат трябва да се получи?

Със по-малко данни де, не е задължително да ми се показват 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лиц на

Отговор
в отговор на Щиpлиц #18

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
...
Нещо такова - ако съм разбрал правилно идеята!

Отговор
в отговор на . #19

Re: MS Exel -

Прегледай пак формулата, имаш х1 х2 х3 до х12 сравнявам 1 с 2 - 12, 2 с 3 - 12 и т.н. така, че нямам инверсия на променливите за да удвоявам.


Welcome to the real world
Отговор
в отговор на . #20

Re: грешка

Абе, аз да си кажа, отново нищо не схванах. Може би ми липсва опита в висша математика, ако това въобще има нещо общо с нея.

Чета условието: "комбинации от по 2 колонки за всеки ред и да се запълни нова колонка"... и от него разбирам, че правим сравнение между колоните "А" до "L", и попълваме с резултата колона "М" - за всеки ред. Също така май по условие не се споменава, че матрицата е симетрична.

...

П.П. За да не се разместват текстовете след постването, може да бъдат заградени с "тагове" ето така:

[prе]
Текст
[/prе]


таговете се пишат на латиница. И тогава в постинга ще се получат във вид както изглеждат в Notepad.


Щирлиц
Отговор