R 如何根据向量元素在列表中的位置替换它们?

R 如何根据向量元素在列表中的位置替换它们?,r,R,早上好 假设我们有以下情况: set.seed(1) x <- sample(c(1,2,3,4,5,6,7,8,9),size=15,replace=TRUE) x library(dplyr) x=case_when(x %in% 1:3 ~ 1, x %in% 6:8 ~ 2, x %in% c(4, 5, 9) ~ 3) print("after") x 此代码将向量x中的一组值(如{6,7,8})替换为一个特定值(如2) 我想做的是将向量1:3,6:8,c(

早上好

假设我们有以下情况:

set.seed(1)
x <- sample(c(1,2,3,4,5,6,7,8,9),size=15,replace=TRUE)
x
library(dplyr)
x=case_when(x %in% 1:3 ~ 1, x %in% 6:8 ~ 2, x %in% c(4, 5, 9) ~ 3)
print("after")
x
此代码将向量x中的一组值(如
{6,7,8}
)替换为一个特定值(如
2

我想做的是将向量
1:3
6:8
c(4,5,9)
存储在一个列表
list\u 1
中,以获得相同的输出。我正在寻找一种解决方案,如果列表的长度
list_1
以及替换规则发生变化,这种解决方案很容易工作请注意,替换规则的数量通常等于列表
list_1
长度。

我希望我的问题是清楚的!
提前感谢您的帮助

也许你可以试试下面的代码

with(stack(setNames(list_1,c(1,2,3))),as.numeric(ind[match(x,values)]))
示例

> x
 [1] 9 4 7 1 2 7 2 3 1 5 5 6 7 9 5

> with(stack(setNames(list_1,c(1,2,3))),as.numeric(ind[match(x,values)]))
 [1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3

另一种选择是使用矩阵乘法

> c(t(c(1,2,3)) %*% do.call(rbind,Map(function(v) x%in% v,list_1)))     
 [1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3
> c(t(c(1,2,3)) %*% do.call(rbind,Map(function(v) x%in% v,list_1)))     
 [1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3