3

R 2.13 で実行して、いくつかの列の data.frame が必要です。最初の列は数値型で、他は文字型です。オブジェクトを作成しているときに、最初の列の値が予期しない、または理解できない方法で変換されています。以下のコードを参照してください。

tmp <- cbind(1:10,rep("aa",10))

tmp

  [,1] [,2]
[1,] "1"  "aa"
[2,] "2"  "aa"
[3,] "3"  "aa"
[4,] "4"  "aa"
[5,] "5"  "aa"
[6,] "6"  "aa"
[7,] "7"  "aa"
[8,] "8"  "aa"
[9,] "9"  "aa"
[10,] "10" "aa"

tmp <- data.frame(tmp)

tmp

   X1 X2
1   1 aa
2   2 aa
3   3 aa
4   4 aa
5   5 aa
6   6 aa
7   7 aa
8   8 aa
9   9 aa
10 10 aa

tmp[,1] <- as.numeric(tmp[,1])

tmp

   X1 X2
1   1 aa
2   3 aa
3   4 aa
4   5 aa
5   6 aa
6   7 aa
7   8 aa
8   9 aa
9  10 aa
10  2 aa

何らかの理由で、最初の列の値が変更されています。ここで明らかに間違ったことをしているに違いありません。誰かが私に回避策を教えてもらえますか?

4

2 に答える 2

6
> tmp <- data.frame(cbind(1:10,rep("aa",10)))
> str(tmp)
'data.frame':   10 obs. of  2 variables:
 $ X1: Factor w/ 10 levels "1","10","2","3",..: 1 3 4 5 6 7 8 9 10 2
 $ X2: Factor w/ 1 level "aa": 1 1 1 1 1 1 1 1 1 1

上記のようtmp$X1に、要因に変換されました。これが、表示されている動作の原因となっています。

試す:

tmp[,1] <- as.numeric(as.character(tmp[,1]))
于 2012-05-14T14:46:04.133 に答える
5

@aixの答えは正しい診断です。ただし、おそらくやりたいことは、データ フレームを直接作成することです。

data.frame(1:10,rep("aa",10))

cbind最初に(マトリックスを作成する)してからデータフレームに変換するのではなく。

data.frame上記のコマンド (X1.10およびrep..aa...10.)を介して最終的に得られる奇妙な名前ではなく、変数に適切な名前を付けたい場合があります。

data.frame(var1=1:10,var2=rep("aa",10))

引数を複製するためdata.frame、これをさらに短縮できます。

data.frame(var1=1:10,var2="aa")

また、2 番目の列の要素ではなく文字ベクトルが本当に必要な場合は、使用stringsAsFactors=FALSEまたはラップvar2インできますI()(つまりvar2=I("aa"))

于 2012-05-14T14:49:42.527 に答える