1

2 つの大きなベクトルがあります。

A: https://dl.dropbox.com/u/22681355/A.csv
B: https://dl.dropbox.com/u/22681355/B.csv

A には 20000 を超えるエントリがありますが、一意のエントリは 1350 しかありません。B は 1 から 9 までの 1350 回生成された乱数です。

A の同じ値が B で同じ値になるように、B から A に値を割り当てたいと思います。たとえば、複数の 1 がある場合、それぞれの 1 は B から同じ値を取得する必要があります。

A[B] コマンドを使用していますが、18000 番目のエントリの後に NA が表示されます

これを行う適切な方法は何ですか?

コード:

A<-read.csv("A.csv")
B<-read.csv("B.csv")

A[B]
4

1 に答える 1

1
  1. read.csv()ベクトルではなく、データフレームを作成します。
  2. あなたはおそらくB[A]、Aの各要素について、その要素の値のインデックスでBの値を取得することを意味します。Aの値の範囲は1〜1899であるため、Bのサイズである1349を超えています。Bの境界外の要素の場合、NAが導入されます。

あなたが達成したいことをする正しい方法は

A = read.table("http://dl.dropbox.com/u/22681355/A.csv")
B = read.table("http://dl.dropbox.com/u/22681355/B.csv")
A = A$V1
B = B$V1
A = as.factor(A)

B[match(A,levels(A))]

match(A,levels(A))Aと同じ長さのベクトルを返します。各要素には、因子のレベルでのAの要素の位置、つまり1から1350(1350の異なる値)の数値が含まれます。Aがだった場合as.factor(c(1,1,3,5,5,7))levels(A)そうなりc(1,3,5,7)match(A,levels(A))そうなるでしょうc(1,1,2,3,3,4)。つまり、そのレベルでの要素の位置です。

于 2012-12-06T16:31:25.087 に答える