我想用整个第二矢量替换矢量的几个元素。条件是,代替第一个向量的元素等于第三个向量。这里有一个例子:用R中的矢量替换矢量的元素
a <- 1:10
b <- 5:7
v <- rnorm(2, mean = 1, sd = 5)
我的输出应该是
c(a[1:4], v, a[8:10])
我已经尝试
replace(a, a == b, v)
a[a == b] <- v
但有一点成功。谁能帮忙?
我想用整个第二矢量替换矢量的几个元素。条件是,代替第一个向量的元素等于第三个向量。这里有一个例子:用R中的矢量替换矢量的元素
a <- 1:10
b <- 5:7
v <- rnorm(2, mean = 1, sd = 5)
我的输出应该是
c(a[1:4], v, a[8:10])
我已经尝试
replace(a, a == b, v)
a[a == b] <- v
但有一点成功。谁能帮忙?
的==
运营商最适合用来搭配相同长度的载体,或者当载体之一,是唯一的长度为1
试试这个,并通知在两种情况下你得到你想要的位置匹配。
> a == b
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Warning message:
In a == b : longer object length is not a multiple of shorter object length
> b == a
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Warning message:
In b == a : longer object length is not a multiple of shorter object length
相反,使用match()
- 这给你的索引位置那里是在价值观匹配。
> match(b, a)
[1] 5 6 7
然后:
a <- 1:10
b <- 5:7
v <- rnorm(3, mean=1, sd=5)
a[match(b, a)] <- v
结果:
a
[1] 1.0000000 2.0000000 3.0000000 4.0000000 -4.6843669 0.9014578 -0.7601413 8.0000000
[9] 9.0000000 10.0000000
这里另一种选择:
a[a %in% b] <- v
由于在OP中描述的示例中有三个共同向量中的数字a
和b
,而v <- rnorm(2, mean = 1, sd = 5)
只包含2个数字,矢量v
将被回收并发出警告。
警告和回收可以防止,例如,通过定义作为v
v <- rnorm(sum(a %in% b), mean = 1, sd = 5)