Страницы: 1
RSS
Группировка по критерию схожести расстояния мин/макс значения в группе
 
Здравствуйте!

Прошу помочь - есть таблица неких значений (столбец B в прилагаемом файле) по каким-то элементам выборки (столбец A). Значения отсортированы по убыванию. Нужно сгруппировать эти элементы в 4 группы таким образом, чтобы расстояния минимального и максимального значения в каждой группе были между группами максимально похожими.

Спасибо!
 
Как вариант.
Код
=ЦЕЛОЕ((МАКС(B:B)-B2)/((МАКС(B:B)-МИН(B:B)+1)/4))+1
 
Спасибо, но обозначенному выше критерию данное решение не соответствует.
 
Тогда вариант макросом.
Стандартное отклонение разностей максимальных и минимальных значений групп минимальное.
Код
Sub Group4()
    Dim arr As Variant
    arr = Range("B2:B21")
    
    Dim crr As Variant
    ReDim crr(1 To UBound(arr, 1), 1 To 1)
    
    Dim i1 As Byte
    Dim i2 As Byte
    Dim i3 As Byte
    Dim i As Byte
    
    Dim brr As Variant
    ReDim brr(1 To 4)
    Dim dMin As Double
    dMin = arr(1, 1)
    
    For i1 = 2 To UBound(arr, 1) - 3
    For i2 = i1 + 1 To UBound(arr, 1) - 2
    For i3 = i2 + 1 To UBound(arr, 1) - 1
        brr(1) = arr(1, 1) - arr(i1, 1)
        brr(2) = arr(i1 + 1, 1) - arr(i2, 1)
        brr(3) = arr(i2 + 1, 1) - arr(i3, 1)
        brr(4) = arr(i3 + 1, 1) - arr(UBound(arr, 1), 1)
        If dMin > WorksheetFunction.StDev_S(brr) Then
            dMin = WorksheetFunction.StDev_S(brr)
            For i = 1 To i1
                crr(i, 1) = 1
            Next
            For i = i1 + 1 To i2
                crr(i, 1) = 2
            Next
            For i = i2 + 1 To i3
                crr(i, 1) = 3
            Next
            For i = i3 + 1 To UBound(arr, 1)
                crr(i, 1) = 4
            Next
        End If
    Next
    Next
    Next
    
    Range("C2").Resize(UBound(crr, 1)) = crr
End Sub
 
Доброе время суток
МатросНаЗебре, учитывая
Цитата
vsg-good написал:
Значения отсортированы по убыванию
Полагаю, что достаточно
Код
=ОСТАТ(СТРОКА();4)+1
 
Андрей VG, что-то подобное я предложил в #2, но автору нужно поточнее. Если данные распределены неравномерно, то такой подход даёт результат с некоторой погрешностью.
 
Цитата
МатросНаЗебре написал:
но автору нужно поточнее
Ну, может быть и так. Спасибо.
 
Вариант, когда находим три самых больших разрыва и по ним делим группы:
Код
=ПОИСКПОЗ(B2;ЕСЛИОШИБКА(НАИБОЛЬШИЙ(ИНДЕКС($B$2:$B$21;Ч(ИНДЕКС(ПОИСКПОЗ(НАИБОЛЬШИЙ(ЧАСТОТА(СТРОКА($1:$1200);B$2:B$21);СТРОКА($1:$3));ЧАСТОТА(СТРОКА($1:$1200);B$2:B$21););)));5-СТРОКА($1:$4));))
=СУММПРОИЗВ(Ч(СТРОКА()<=ОСТАТ(НАИБОЛЬШИЙ((B$2:B$20-B$3:B$21)*100+СТРОКА($2:$20);СТРОКА($1:$3));100))) ' Формула попроще
Изменено: Светлый - 28.04.2021 16:27:59
Страницы: 1
Наверх