これは R の効率に関する問題です。属性を持つ 2 つの数値ベクトルがnames
あり、共通に基づいて一方のベクトルの値を他方のベクトルに効率的に割り当てたいと考えています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
2 番目のベクトルは次のように定義されます。
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)
、最初に順序付けされるため、間違った結果が生成されます。これも最適な戦略ではないようです。
どんなアイデアでも大歓迎です!