如何根据元素身份替换列表中的元素

4

我有一个像这样的列表:

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()等不同的函数,但我很困惑。你能帮帮我吗?

3个回答

6

尝试

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()

虽然不确定这个例子中是否会使代码更易于理解。


3
如果你将你的列表转换为字符向量,你可以使用它来索引到new_val中:
unname(new_val[as.character(list1)])
# 6 4 1 3 2 5

1

使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接