У меня есть массив, для которого я хотел бы получить меру сходства между значениями в каждом столбце. Под этим я подразумеваю, что хочу сравнить строки между попарными столбцами массива и увеличить меру, когда их значения совпадают. Тогда результирующая мера будет одинакова максимум для двух столбцов.
По сути, моя проблема такая же, как обсуждалось здесь: R: Сравнить все столбцы попарно в матрице, за исключением того, что я не хочу, чтобы подсчитывались пустые ячейки.
В примере данных, созданных из кода, полученного со связанной страницы:
data1 <- c("", "B", "", "", "")
data2 <- c("A", "", "", "", "")
data3 <- c("", "", "C", "", "A")
data4 <- c("", "", "", "", "")
data5 <- c("", "", "C", "", "A")
data6 <- c("", "B", "C", "", "")
my.matrix <- cbind(data1, data2, data3, data4, data5, data6)
similarity.matrix <- matrix(nrow=ncol(my.matrix), ncol=ncol(my.matrix))
for(col in 1:ncol(my.matrix)){
matches <- my.matrix[,col] == my.matrix
match.counts <- colSums(matches)
match.counts[col] <- 0
similarity.matrix[,col] <- match.counts
}
Я получаю:
similarity.matrix =
V1 V2 V3 V4 V5 V6
1 0 3 2 4 2 4
2 3 0 2 4 2 2
3 2 2 0 3 5 3
4 4 4 3 0 3 3
5 2 2 5 3 0 3
6 4 2 3 3 3 0
который считает пары без значений.
Мой желаемый результат:
expected.output =
V1 V2 V3 V4 V5 V6
1 0 0 0 0 0 1
2 0 0 0 0 0 0
3 0 0 0 0 2 1
4 0 0 0 0 0 0
5 0 0 2 0 0 1
6 1 0 1 0 1 0
Спасибо,
Мэтт
''
наNA
, т.е.is.na(matrix) <- matrix==''
и в вашем циклеmatch.counts <- colSums(matches, na.rm=TRUE)
- person akrun   schedule 10.06.2015matrix
, поскольку это имя часто используемой функции. - person Frank   schedule 11.06.2015