我有两个大的载体:
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]
答案 0 :(得分:1)
read.csv()
创建一个数据框,而不是矢量。B[A]
对于A中的每个元素,它在该元素的值的索引处获得B的值。由于A的值在1到1899之间,它超过了B的大小1349.对于那些超出B界限的元素,NAs被引入。实现您想要实现的目标的正确方法是
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)
,即元素在其级别中的位置。