【已解決】R語言新增行、列,轉置操作
嚴格來說,矩陣的長度和維度是固定的,因此不能增加或刪除行或列。但是可以給矩陣重新賦值,這樣可以得到和增加或刪除一樣的效果。
函式rbind()(代表row bind,按行組合)和函式cbind()(代表column bind,按列組合)可以給矩陣增加行或列。
> one <- c( 1, 1, 1, 1 )
> z <- matrix( c( 1, 2, 3, 4, 1, 1, 0, 0, 1, 0, 1, 0 ),nrow=4 )
> cbind( one, z )
one
[1,] 1 1 1 1
[2,] 1 2 1 0
[3,] 1 3 0 1
[4,] 1 4 0 0
> cbind( 2, z )
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 2 2 1 0
[3,] 2 3 0 1
[4,] 2 4 0 0
注:這裡用到了迴圈補齊(recycling)。
這裡,cbind()把一列由1組成的向量和z組合在一起,建立了一個新矩陣。
不過,請謹慎使用cbind()!和建立向量一樣,建立一個新的矩陣是很耗時間的(畢竟矩陣也屬於向量)。建立新矩陣會減低程式速度,如果在迴圈中重複建立矩陣,將浪費大量的時間。因此在迴圈中每次往矩陣中新增一行(列),最後矩陣會變成一個大矩陣,這種做法是不可取的,最好一開始就定義好一個大矩陣。這個事先定義的矩陣是空的,但是在迴圈過程中逐行或列進行賦值,這種做法避免了迴圈過程中每次進行耗時的矩陣記憶體分配。
處理矩陣轉置問題:
> tx<- read.table("x.txt", header=FALSE)
> ty<- t(tx)
> write.table(ty, file="D:/ty.txt", quote-F, col.name=F, row.names=F)
參考文章:
http://blog.csdn.net/thoixy/article/details/40502829