命名列表中的查找值替换为R

时间:2019-02-19 19:32:31

标签: r list functional-programming dplyr named

我有一个调查的编码答案的列表,以及一个抄本,该抄本对所述调查中特定问题的每个可能的编码答案都有实际答案。数据被设置为一个列表,该列表是针对上下文构建的:

mylist=list(a=list(AA="Yes",AB="No",AC="Maybe"),b=list(BA="Yes",BB="No",BC="Maybe"))
myanswers<-list(a="AA",b="BC")

所以当前数据如下:

myanswers
$a
[1] "AA"

$b
[1] "BC"

但是我想要

myanswers
$a
[1] "Yes"

$b
[1] "Maybe"

我尝试使用不同的lapply方法,但无法使其正常工作。而且,索引并不总是对齐,因此尝试for循环也无法获得最佳结果。

2 个答案:

答案 0 :(得分:3)

您可以使用基数R和mapply函数(假设列表顺序相同)来执行此操作

mapply(function(a,b) a[b], mylist, myanswers)

如果不是这种情况,可以Map覆盖名称

Map(function(x) {
    mylist[[x]][[myanswers[[x]]]]
}, names(myanswers))

答案 1 :(得分:0)

您首先创建查找表的另一个选项

(lookup <- do.call(rbind, lapply(mylist, stack)))
#    values ind
#a.1    Yes  AA
#a.2     No  AB
#a.3  Maybe  AC
#b.1    Yes  BA
#b.2     No  BB
#b.3  Maybe  BC

然后使用lapplymatch进行替换

lapply(myanswers, function(x) lookup$values[match(x, lookup$ind)])
#$a
#[1] "Yes"
#
#$b
#[1] "Maybe"