2015-12-29 4 views
3

У меня есть две матрицы, которые я хочу переплетать/чередовать/складывать поочередно друг на друга/rbind чередующимся образом.Альтернативные, переплетенные или чересстрочные две матрицы

ranks=1:3 
names=c("Karl", "Klaus", "Mary") 
x <- cbind(ranks, names) 

universities=c("Cape Town", "London", "Berlin") 
y <- cbind(rep("", 3), universities) 

После одного ряда x, я хочу один ряд y:

 [,1] [,2]  
[1,] "1" "Karl"  
[2,] "" "Cape Town" 
[3,] "2" "Klaus"  
[4,] "" "London" 
[5,] "3" "Mary" 
[6,] "" "Berlin" 

Я попытался matrix(rbind(x, y), ncol=2) (который, кажется, чтобы решить эту проблему, если у меня было две строки) без эффекта

+2

'матрица (rbind (т (х), т (у)), Ncol = 2, byrow = TRUE)' – user20650

+0

Транспонирование! Отличная идея. Хотите обновить свой комментарий до ответа? – MERose

+0

напишите, пожалуйста, напишите – user20650

ответ

1

Здесь являются двумя альтернативами.

Во-первых, при условии, что мы должны начать с «х» и «у», вы можете попробовать interleave из пакета «GData»:

library(gdata) 
interleave(x, y) 
#  ranks names  
# [1,] "1" "Karl"  
# [2,] "" "Cape Town" 
# [3,] "2" "Klaus"  
# [4,] "" "London" 
# [5,] "3" "Mary"  
# [6,] "" "Berlin" 

Во-вторых, предполагая, что мы можем начать с «ряды», " имена «и„университеты“, вы можете использовать базу R, как это:

cbind(c(t(cbind(ranks, ""))), c(t(cbind(names, universities)))) 
#  [,1] [,2]  
# [1,] "1" "Karl"  
# [2,] "" "Cape Town" 
# [3,] "2" "Klaus"  
# [4,] "" "London" 
# [5,] "3" "Mary"  
# [6,] "" "Berlin" 

Лучшей альтернативой, однако, было бы использовать что-то вроде melt (от„reshape2“или» data.table «). Это позволит вам добавить еще одну переменную, которая указывает, какой тип измерения представляет значение.

library(data.table) 
melt(data.table(ranks, names, universities), "ranks") 
# ranks  variable  value 
# 1:  1  names  Karl 
# 2:  2  names  Klaus 
# 3:  3  names  Mary 
# 4:  1 universities Cape Town 
# 5:  2 universities London 
# 6:  3 universities Berlin 

Или, чтобы соответствовать нужной упорядоченность:

library(data.table) 
setorder(melt(data.table(ranks, names, universities), "ranks"), ranks)[] 
# ranks  variable  value 
# 1:  1  names  Karl 
# 2:  1 universities Cape Town 
# 3:  2  names  Klaus 
# 4:  2 universities London 
# 5:  3  names  Mary 
# 6:  3 universities Berlin 

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

  • Нет связанных вопросов^_^