行列の転置と形状変更
行列に対してt()、dim()、reshape操作を使います。
「行列の転置と形状変更」はCoddyKit上の無料R Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。
t()による行列の転置
t(m)は行列を転置します。つまり、行と列を入れ替え、結果では行iを列iにします。次元も入れ替わるため、3x4の行列を転置すると4x3の行列になります。
m <- matrix(1:6, nrow = 2, ncol = 3)
cat('Original (2x3):
'); print(m)
cat('Transposed (3x2):
'); print(t(m))
cat('Original dim:', dim(m), '-> Transposed dim:', dim(t(m)), '
')名前付き次元を持つ行列の転置
行列に行名と列名がある場合、t()は名前も正しく入れ替えます。行名は列名に、列名は行名になります。これにより、転置後もデータのラベルが維持されます。
scores <- matrix(
c(88,92,75, 79,85,90),
nrow = 2, byrow = TRUE,
dimnames = list(c('Alice', 'Bob'), c('Math', 'Sci', 'Eng'))
)
cat('Original (students x subjects):
'); print(scores)
cat('Transposed (subjects x students):
'); print(t(scores))dim(m) <- c(r, c)による形状変更
dim属性を再代入すると、行列の形状を変更できます。要素の総数は変わらなければなりません。形状変更では、matrix()と同じように列ごとに読み取りと格納が行われます。
m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Original (3x4):
'); print(m)
# Reshape to 4x3
dim(m) <- c(4, 3)
cat('Reshaped to (4x3):
'); print(m)
# Reshape to 6x2
dim(m) <- c(6, 2)
cat('Reshaped to (6x2):
'); print(m)as.vector()による行列からベクトルへの変換
as.vector(m)は行列を1次元のベクトルに平坦化し、値を列ごとに読み取ります。これにより、オブジェクトからすべての次元属性が削除されます。
m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
'); print(m)
v <- as.vector(m)
cat('As vector (col-by-col):', v, '
')
cat('Is vector:', is.vector(v), '
')
cat('Is matrix:', is.matrix(v), '
')as.matrix()によるベクトルから行列への変換
as.matrix(v)はベクトルを1列の行列に変換します。最も基本的な変換方法です。その後、dim()を使って目的の次元に形状を変更できます。
v <- c(5, 10, 15, 20, 25, 30)
cat('Vector:', v, '
')
# as.matrix makes a 6x1 matrix
m_single_col <- as.matrix(v)
cat('Single-column matrix:
'); print(m_single_col)
cat('Dimensions:', dim(m_single_col), '
')rbind() — 行の積み重ね
rbind()は行を積み重ねることで、行列やベクトルを結合します。すべての入力の列数が同じでなければなりません。結果の行列の行数は、入力の行数を合計したものになります。
first_half <- matrix(1:6, nrow = 2, ncol = 3)
second_half <- matrix(7:12, nrow = 2, ncol = 3)
combined <- rbind(first_half, second_half)
cat('rbind result (4x3):
'); print(combined)
cat('Dimensions:', dim(combined), '
')cbind() — 列の結合
cbind()は列を横に並べて結合することで、行列やベクトルを結合します。すべての入力の行数が同じでなければなりません。結果の列数は、入力の列数を合計したものになります。
ids <- matrix(101:104, nrow = 4, ncol = 1)
scores_mat <- matrix(c(88,79,95,72, 92,85,78,90), nrow = 4)
full_data <- cbind(ids, scores_mat)
colnames(full_data) <- c('ID', 'Test1', 'Test2')
cat('cbind result:
'); print(full_data)名前付きの行・列でのrbind()とcbind()
名前付きの行列や名前付きベクトルに対してrbind()またはcbind()を使うと、次元名が維持されます(ベクトルの場合は、ベクトル名が行名または列名になります)。
# Add a new student row with rbind
existing <- matrix(c(88,92,75, 79,85,90), nrow = 2, byrow = TRUE,
dimnames = list(c('Alice','Bob'), c('Math','Sci','Eng')))
new_student <- c(Math=95, Sci=78, Eng=82)
updated <- rbind(existing, Carol = new_student)
cat('Updated roster:
'); print(updated)二重転置の恒等性
t()を2回適用すると、元の行列が返されます。これは便利な妥当性チェックであり、転置がそれ自体を逆演算とすることも示しています:t(t(m)) == m。
m <- matrix(c(1,2,3,4,5,6), nrow = 2)
cat('Original:
'); print(m)
cat('t(m):
'); print(t(m))
cat('t(t(m)):
'); print(t(t(m)))
cat('t(t(m)) == m:', all(t(t(m)) == m), '
')実践:ピボット形式の形状変更
よくある形状変更の作業に、ワイド形式とロング形式の相互変換があります。ここでは、行列演算を使って、転置、平坦化、構造の再構築による手動のワイド形式からロング形式へのピボットを再現します。
# Wide: 3 students x 4 months scores
wide <- matrix(c(85,88,90,92, 78,80,79,83, 91,94,88,95),
nrow = 3, byrow = TRUE)
rownames(wide) <- c('Alice', 'Bob', 'Carol')
colnames(wide) <- c('Jan', 'Feb', 'Mar', 'Apr')
cat('Wide format:
'); print(wide)
# Transposed: 4 months x 3 students
long_view <- t(wide)
cat('Transposed (months x students):
'); print(long_view)形状変更と結合のまとめ
行列の形状変更と結合に使う主なツール:
t(m)— 転置(行と列を入れ替える)dim(m) <- c(r, c)— その場で形状を変更(要素の総数は同じ)as.vector(m)— 1次元ベクトルに平坦化(列優先)as.matrix(v)— ベクトルを1列の行列に変換rbind(...)— 行列を縦方向に積み重ねるcbind(...)— 行列を横方向に結合する
# Demo all tools
v <- 1:6
m1 <- as.matrix(v) # 6x1
dim(m1) <- c(2, 3) # reshape to 2x3
m2 <- t(m1) # 3x2
m3 <- cbind(m2, c(10, 20, 30)) # 3x3
cat('Final matrix:
'); print(m3)クイックチェック
t(matrix(1:12, nrow = 3, ncol = 4))はどの次元の行列を生成しますか?
まとめ:転置と形状変更
すばらしいです!このレッスンの重要なポイントは次のとおりです。
t(m)は行と列を入れ替え、t(t(m))は元の行列を返しますdim(m) <- c(r, c)はコピーを作成せずに形状を変更します(要素数が同じである必要があります)as.vector()は列ごとに平坦化し、as.matrix()は1列の行列を作成しますrbind()は行を積み重ねます(列数が同じである必要があります)cbind()は列を横に並べて結合します(行数が同じである必要があります)- これらの演算を行っても、名前付きの次元は維持されます
# Practical: merge data then compute column means
team_a <- matrix(c(82,78,91, 85,80,88), nrow = 2, byrow=TRUE)
team_b <- matrix(c(75,92,79, 88,84,93), nrow = 2, byrow=TRUE)
all_teams <- rbind(team_a, team_b)
colnames(all_teams) <- c('Speed', 'Accuracy', 'Strength')
cat('Combined teams:
'); print(all_teams)
cat('Average per skill:', colMeans(all_teams), '
')よくある質問
「行列の転置と形状変更」レッスンは無料ですか?
はい。「行列の転置と形状変更」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。
「行列の転置と形状変更」で何を学びますか?
行列に対してt()、dim()、reshape操作を使います。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
R Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「行列の転置と形状変更」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このR Academyレッスンでコードを書いて実行できますか?
はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。