首页 > 解决方案 > 如何根据向量元素在列表中的位置替换它们?

问题描述

早上好 !

假设我们有以下内容:

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

输出 :

    3 4 6 9 2 9 9 6 6 1 2 2 7 4 7

[1] "after"

    1 3 2 3 1 3 3 2 2 1 1 1 2 3 2

此代码将{6,7,8}向量 x 中的一组值替换为一个特定值,例如2.

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

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

标签: r

解决方案


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

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

推荐阅读