2017-02-03 3 views
7

Итак, у меня есть 2 dataframes. представить их следующим образом:Обратная диагональ на матрице

data1 <- data.frame(c(1.2, 1.4, 1.3), 
        c(1.12,1.1, 1.9), 
        c(1.8, 1.1, 1.32)) 

data2 <- data.frame(c(0.4, 0.2, 0.3), 
        c(0.1, 0.1, 0.4), 
        c(0.5, 0.7, 0.4)) 

как я могу создать совместную матрицу, которая будет выглядеть следующим образом:

combined.data 
> 1.2 1.12 1.80 
    1.4 1.10 0.7 
    1.3 0.4 0.4 

левая верхняя матрица data1, правый нижний является data2. Я

До сих пор мой код это, и я получаю то, что хочу, но до стороной вниз:

new <- -data1 
#new <- new[, rev(colnames(data1))] 
# diag(new) <- NA 
corel <- data2 
#corel <- corel[, rev(colnames(data2))] 


new[upper.tri(new)] <- corel[upper.tri(corel)] 

И мне нужны строки и порядок столбцов неповрежденными

Любые мысли ?

После использования дела Хабориме я как-то получил результаты. И я создал тепловую карту, чтобы показать ее. Проблема в том, что в некоторых пространствах данные перекрывают 2 матрицы.

Вот Heatmap enter image description here

выше диагонали она должна быть полностью красным, а ниже диагонали, синий.

Я принял ответ Хабориме. и проблема в том, что мои данные были 32 * 31. если ваша матрица не квадрат, это будет беспорядок! Я только что добавил 1 фиктивный столбец к моему набору данных, и он работал как шарм!

+3

Ваши линии дают предупреждения и то, что они производят очень вряд ли будет то, что вы имели в виду. Пожалуйста, потратьте немного времени, чтобы убедиться, что у нас есть воспроизводимый пример. – nicola

+0

Я не уверен на 100%, что вы пытаетесь сделать, но прежде всего измените 'as.data.frame' на' data.frame'. Я чувствую, что проблема может заключаться в том, что вы считаете, что каждый вектор чисел, который вы читаете в кадре данных, является строкой, тогда как на самом деле это столбец, то есть 'c (1.2, 1.4, 1.3)' создает первую COLUMN ' data1'. –

+0

Возможно, они хотят 'rbind' вместо' as.data.frame' ... – nicola

ответ

0

Вы можете сделать:

data1 <- data.frame(c(1.2, 1.4, 1.3), 
        c(1.12,1.1, 1.9), 
        c(1.8, 1.1, 1.32)) 

data2 <- data.frame(c(0.4, 0.2, 0.3), 
        c(0.1, 0.1, 0.4), 
        c(0.5, 0.7, 0.4)) 

combined=as.matrix(data1) 
combined[apply(lower.tri(as.matrix(data2)), 1, rev)] <-as.matrix(data2)[apply(lower.tri(as.matrix(data2)), 1, rev)] 

> combined 
    c.1.2..1.4..1.3. c.1.12..1.1..1.9. c.1.8..1.1..1.32. 
[1,]    1.2    1.12    1.8 
[2,]    1.4    1.10    0.7 
[3,]    1.3    0.40    0.4 
+0

Я просто дал вам ваш подход. Это работает любопытно ... проблема в том, что в некоторых точках одна матрица перекрывается с другой. Как я могу добавить изображение тепловой карты, чтобы показать вам, как она себя ведет? – Mixalis

+0

@Mixalis вы можете отредактировать свой пост. – Haboryme

+0

проверьте сейчас пожалуйста. – Mixalis

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