0

行名を含むcsvファイルにいくつかのデータがあります。行名を保持しながら、データの単一の列を取得したい。csvファイルは、次の方法で作成されました。

MAT <- matrix(nrow=5, ncol=2, c(1:10))
rownames(MAT) <- c("First","Second","Third","Fourth","Fifth")
write.csv(MAT, file='~/test.csv', row.names=TRUE) 

マトリックスMATを以下に示します。最終的に、この行列の最初の列 ( csvファイルを読み込んだ後) が必要で、行名はそのままです。

       [,1] [,2]
First     1    6
Second    2    7
Third     3    8
Fourth    4    9
Fifth     5   10

csvファイルを読んだら、

MAT2 <- read.csv(file='~/test.csv')

MAT2によって与えられます

        X V1 V2
 1  First  1  6
 2 Second  2  7
 3  Third  3  8
 4 Fourth  4  9
 5  Fifth  5 10

read.csvコマンドは別の行を作成したようです。いずれにしてもMAT3 <- MAT2[,2]、上記のような行列は得られません。as.matrix(MAT2[,2])私が望むように行名を保持しません。

続行する方法についてのアイデアはありますか?

4

1 に答える 1

2

おそらく、より良い出発点は次のとおりです。

read.csv(file='~/test.csv', row.names = 1)
       V1 V2
First   1  6
Second  2  7
Third   3  8
Fourth  4  9
Fifth   5 10

これを次のようにラップすることもできますas.matrix:

as.matrix(read.csv(file='~/test.csv', row.names = 1))

それらの構造を比較します。

> str(read.csv(file='~/test.csv', row.names = 1))
'data.frame':   5 obs. of  2 variables:
 $ V1: int  1 2 3 4 5
 $ V2: int  6 7 8 9 10
> str(as.matrix(read.csv(file='~/test.csv', row.names = 1)))
 int [1:5, 1:2] 1 2 3 4 5 6 7 8 9 10
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:5] "First" "Second" "Third" "Fourth" ...
  ..$ : chr [1:2] "V1" "V2"

元の構造を保持しながら列を抽出する方法だけを実際に懸念している場合は、おそらく次のdrop = FALSEことを求めています。

MAT2 <- as.matrix(read.csv(file='~/test.csv', row.names = 1))
#        V1 V2
# First   1  6
# Second  2  7
# Third   3  8
# Fourth  4  9
# Fifth   5 10
MAT2[, 2]
# First Second  Third Fourth  Fifth 
#     6      7      8      9     10 
MAT2[, 2, drop = FALSE]
#        V2
# First   6
# Second  7
# Third   8
# Fourth  9
# Fifth  10
于 2013-07-16T16:11:03.750 に答える