1

N列の行列Aがあり、この行列から2つ(または任意のサブセット)の列を取得して、新しい行列Bを作成するとします。たとえば、次のようになります。

B = cbind(A[,1], A[,3]) 

2つの列のヘッダー名が転送されるように追加できる簡単な引数はありますか?names(B) = names(A)行列が同じ次元ではないため、使用は機能しません。

4

2 に答える 2

3

マトリックスを誤って呼び出しているデータフレームを使用している可能性があるため、例が非常に役立ちます。行列で使用される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その損失を防ぎます。

于 2012-12-13T18:15:27.343 に答える
1

'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)]
于 2012-12-13T18:13:14.197 に答える