2015-12-09 4 views
1

Извините, если этот вопрос уже был задан где-то, но поиск мне действительно не помог. Прежде всего, я настоящий новичок в программировании, и я застреваю, пытаясь рассчитать, что, вероятно, есть что-то основное ...R - Возвращаемые кол-во попарно выбранных строк из матрицы

В принципе, у меня есть матрица 14x265, заполненная 0 и 1. Для этой матрицы я хочу рассчитать и вернуть colSums для всех попарно выбранных строк.

Например Давайте возьмем матрицу

1 0 1 0  
0 1 1 1 
0 0 0 1 

Я хотел бы следующие вернулся ко мне (матрица 3х5):

1-2 1 1 2 1  
1-3 1 0 1 1 
2-3 0 1 1 2 

Я совершенно не знаю, как это сделать. Я работал с функциями «combn» и «apply», но пока это не увенчалось успехом.

Может кто-нибудь мне помочь?

Заранее благодарен! Ник

ответ

2

С вашей матрицы образца

mm<-structure(c(1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L), .Dim = 3:4) 

Вы можете использовать apply()

t(apply(combn(nrow(mm),2),2, function(i) { 
    colSums(mm[i,]) 
})) 

    [,1] [,2] [,3] [,4] 
[1,] 1 1 2 1 
[2,] 1 0 1 1 
[3,] 0 1 1 2 

И если вы хотите добавить в ярлыках

cx <- combn(nrow(mm),2) 
data.frame(
    pair=apply(cx,2, paste, collapse="-"), 
    t(apply(cx,2, function(i) { 
     colSums(mm[i,]) 
    })) 
) 
# pair X1 X2 X3 X4 
# 1 1-2 1 1 2 1 
# 2 1-3 1 0 1 1 
# 3 2-3 0 1 1 2 
+0

отлично работает! Большое спасибо! – Nick

Смежные вопросы