Имам масив, за който бих искал да получа мярка за приликата между стойности във всяка колона. С което искам да кажа, че искам да сравня редовете между колоните по двойки на масива и да увелича мярка, когато стойностите им съвпадат. Тогава получената мярка ще бъде най-много еднаква за две колони.
По същество проблемът ми е същият като обсъдения тук: 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