这是关于 R 中效率的问题。我有两个带有names
属性的数值向量,我想根据 common 有效地将一个向量的值分配给另一个向量names
。
例如,第一个向量定义为:
set.seed(1);
a<-rep(NA,10);
names(a)<-1:10;
d<-a; # we will need this later
a
1 2 3 4 5 6 7 8 9 10
NA NA NA NA NA NA NA NA NA NA
第二个向量定义为:
b<-sample(letters, 5);
names(b)<-sample(1:10, 5);
b
9 10 6 5 1
"g" "j" "n" "u" "e"
现在下面的代码完全符合我的要求,它查找所有names(b)
共同点names(a)
并分配给a
的值中的这些位置b
:
for(p in 1:length(b)){
a[which(names(a) == names(b)[p])]<-b[p]
};
a
1 2 3 4 5 6 7 8 9 10
"e" NA NA NA "u" "n" NA NA "g" "j"
我的问题是:有没有更好更有效的方法来做到这一点?我正在处理更大的向量,并且我一直认为必须有更好的方法来做到这一点。
更复杂的方法,例如:
d[which(names(d) %in% names(b))]<- b
d
1 2 3 4 5 6 7 8 9 10
"g" NA NA NA "j" "n" NA NA "u" "e"
all.equal(a,d)
[1] "4 string mismatches"
产生错误的结果,因为它需要它names(b)
并且names(a)
首先排序,这似乎也不是最佳策略。
任何想法将不胜感激!