N列の行列Aがあり、この行列から2つ(または任意のサブセット)の列を取得して、新しい行列Bを作成するとします。たとえば、次のようになります。
B = cbind(A[,1], A[,3])
2つの列のヘッダー名が転送されるように追加できる簡単な引数はありますか?names(B) = names(A)
行列が同じ次元ではないため、使用は機能しません。
N列の行列Aがあり、この行列から2つ(または任意のサブセット)の列を取得して、新しい行列Bを作成するとします。たとえば、次のようになります。
B = cbind(A[,1], A[,3])
2つの列のヘッダー名が転送されるように追加できる簡単な引数はありますか?names(B) = names(A)
行列が同じ次元ではないため、使用は機能しません。
マトリックスを誤って呼び出しているデータフレームを使用している可能性があるため、例が非常に役立ちます。行列で使用されるnames<-関数は、行列構造を破壊するためです。列名を変更するための適切な関数はですcolnames<-
。さらに、「[」関数を使用してマトリックスから列を抽出している場合、列名が値と出会わない方法はほとんどありません。
> mat <- matrix(1:9, 3)
> colnames(mat) <- letters[1:3]
> mat[ , 2:3]
b c
[1,] 4 7
[2,] 5 8
[3,] 6 9
あなたのコメントに応えて、これを行う方が良いでしょう:
B <- A[ , c(1,3) ]
そうすれば、列名は適切に引き継がれます。(注:cbind操作でcol.namesが表示されないことに驚き、なぜそうなるのか疑問に思いました。cbindで "["を使用するこのバージョンでは、col.namesが保持されます。
> B=cbind( A[,1,drop=FALSE], A[,3,drop=FALSE])
> B
a c
[1,] 1 7
[2,] 2 8
[3,] 3 9
「[」関数は、単一の列または行をアトミックベクトルに強制し、明らかにそのdimnames属性も失います。drop=FALSE
その損失を防ぎます。
'select'でサブセットを使用できます?subset
B <- subset(A,select = c(col1,col2))
例えば
A <- mtcars
B <- subset(A,select = c(mpg,cyl))
mpg cyl
Mazda RX4 21.0 6
Mazda RX4 Wag 21.0 6
Datsun 710 22.8 4
Hornet 4 Drive 21.4 6
Hornet Sportabout 18.7 8
Valiant 18.1 6
インデックスで行う場合:
B=cbind(A[,1],A[,3])
colnames(B) <- colnames(A)[c(1,3)]