我列了一个清单:
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()等不同的函数,但是我很吃力。你能帮我吗?
lsmepo6l1#
试试看
new_val[unlist(list1)] # a b c d e f # 6 4 1 3 2 5
如果不需要命名向量作为结果,请使用unname:
unname
new_val[unlist(list1)] |> unname()
使用中心管运算符|>编写上述内容的一种更好的方法:
|>
list1 |> unlist() |> `[`(x = new_val, i = _) |> unname()
但不确定这是否会使本例中的代码更容易理解。
wz1wpwve2#
如果将列表改回字符向量,则可以使用它来索引new_val:
new_val
unname(new_val[as.character(list1)]) # 6 4 1 3 2 5
hvvq6cgz3#
使用sapply的另一种方法
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
3条答案
按热度按时间lsmepo6l1#
试试看
如果不需要命名向量作为结果,请使用
unname
:使用中心管运算符
|>
编写上述内容的一种更好的方法:但不确定这是否会使本例中的代码更容易理解。
wz1wpwve2#
如果将列表改回字符向量,则可以使用它来索引
new_val
:hvvq6cgz3#
使用
sapply
的另一种方法或未命名