gpt4 book ai didi

r - 匹配向量之间的名称并分配相应的值

转载 作者:行者123 更新时间:2023-12-02 12:05:04 25 4
gpt4 key购买 nike

这是一个关于 R 效率的问题。我有两个数值向量 names属性,并且我想根据公共(public) 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)首先订购,这似乎也不是最佳策略。

任何想法将不胜感激!

最佳答案

a[intersect(names(b), names(a))] <- b[intersect(names(b), names(a))]
> a
1 2 3 4 5 6 7 8 9 10
"e" NA NA NA "u" "n" NA NA "g" "j"

关于r - 匹配向量之间的名称并分配相应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18129408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com