R语言 如何基于标识替换列表的元素

gr8qqesn  于 2022-12-25  发布在  其他
关注(0)|答案(3)|浏览(176)

我列了一个清单:

list1 <- as.list(c('a', 'b', 'c', 'd', 'e', 'f'))

我想把它的所有元素替换成

new_val <- c('c'=1,'e'=2,'d'=3,'b'=4,'f'=5,'a'=6)

预期结果应该是这样的:

list3 <- c(6, 4, 1, 3, 2, 5)

我正在尝试使用replace()和modifyList()等不同的函数,但是我很吃力。你能帮我吗?

lsmepo6l

lsmepo6l1#

试试看

new_val[unlist(list1)]
# a b c d e f 
# 6 4 1 3 2 5

如果不需要命名向量作为结果,请使用unname

new_val[unlist(list1)] |> 
  unname()

使用中心管运算符|>编写上述内容的一种更好的方法:

list1 |> 
  unlist() |> 
  `[`(x = new_val, i = _) |> 
  unname()

但不确定这是否会使本例中的代码更容易理解。

wz1wpwve

wz1wpwve2#

如果将列表改回字符向量,则可以使用它来索引new_val

unname(new_val[as.character(list1)])
# 6 4 1 3 2 5
hvvq6cgz

hvvq6cgz3#

使用sapply的另一种方法

sapply(list1, function(x) new_val[x])
a b c d e f 
6 4 1 3 2 5

或未命名

unname(sapply(list1, function(x) new_val[x]))
[1] 6 4 1 3 2 5

相关问题