Другой ответ обрезки, учитывающий экстремумы:
dat <- read.table("clipboard", header=TRUE)
cuts <- apply(dat, 2, cut, c(-Inf,seq(0.5, 1, 0.1), Inf), labels=0:6)
cuts[cuts=="6"] <- "0"
cuts <- as.data.frame(cuts)
cosinFcolor cosinEdge cosinTexture histoFcolor histoEdge histoTexture jaccard
1 3 0 0 1 1 0 0
2 0 0 5 0 2 2 0
3 1 0 2 0 0 1 0
4 0 0 3 0 1 1 0
5 1 3 1 0 4 0 0
6 0 0 1 0 0 0 0
Функция обрезки разбивается на ячейки в зависимости от заданных срезов. Итак, давайте возьмем 1:10 и разделим его на 3, 5 и 7.
cut(1:10, c(3, 5, 7))
[1] <NA> <NA> <NA> (3,5] (3,5] (5,7] (5,7] <NA> <NA> <NA>
Levels: (3,5] (5,7]
Вы можете видеть, как это привело к тому, что уровни находятся между перерывами. Также обратите внимание, что он не включает 3 (есть аргумент include.lowest
, который будет включать его). Но это ужасные названия для групп, давайте назовем их группами 1 и 2.
cut(1:10, c(3, 5, 7), labels=1:2)
[1] <NA> <NA> <NA> 1 1 2 2 <NA> <NA> <NA>
Лучше, но что там с АН? Они находятся за пределами наших границ и не учитываются. Чтобы подсчитать их, в своем решении я добавил -infinity и infinity, чтобы все точки были включены. Обратите внимание, что, поскольку у нас больше перерывов, нам понадобится больше меток:
x <- cut(1:10, c(-Inf, 3, 5, 7, Inf), labels=1:4)
[1] 1 1 1 2 2 3 3 4 4 4
Levels: 1 2 3 4
Хорошо, но мы не хотели 4 (в соответствии с вашей проблемой). Мы хотели, чтобы все четверки были в группе 1. Итак, давайте избавимся от записей, которые помечены как «4».
x[x=="4"] <- "1"
[1] 1 1 1 2 2 3 3 1 1 1
Levels: 1 2 3 4
Это немного отличается от того, что я делал раньше, обратите внимание, что я убрал все последние ярлыки в конце, но я сделал это вот так, чтобы вы могли лучше увидеть, как работает cut
.
Хорошо, функция apply
. До сих пор мы использовали разрез на одном векторе. Но вы хотите, чтобы он использовался для набора векторов: каждого столбца вашего фрейма данных. Это то, что делает второй аргумент из apply
. 1 применяет функцию ко всем строкам, 2 применяется ко всем столбцам. Примените функцию cut
к каждому столбцу вашего фрейма данных. Все, что после cut
в функции apply, является просто аргументами для cut
, о котором мы говорили выше.
Надеюсь, что помогает.
Событие onload срабатывает, когда страница полностью отрисована (включая зависимости, такие как изображения).
Возможно, вы путаете его с событием dom: loaded прототипа (которое срабатывает, когда DOM загружается, но раньше все зависимости были включены)?
(Честно говоря, это звучит как проблема XY .)