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