在R中为较大数量的值分配较少数量的值

时间:2012-12-06 16:08:48

标签: r

我有两个大的载体:

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条之后我得到了NAs

这样做的正确方法是什么?

代码:

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

A[B]

1 个答案:

答案 0 :(得分:1)

  1. read.csv()创建一个数据框,而不是矢量。
  2. 你可能意味着B[A]对于A中的每个元素,它在该元素的值的索引处获得B的值。由于A的值在1到1899之间,它超过了B的大小1349.对于那些超出B界限的元素,NAs被引入。
  3. 实现您想要实现的目标的正确方法是

    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),即元素在其级别中的位置。