1

我有两个大向量:

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 次生成的随机数

我想将 B 中的值分配给 A,以便 A 中的相同值在 B 中获得相同的值。例如,如果有多个 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 回答