我有一个调查的编码答案的列表,以及一个抄本,该抄本对所述调查中特定问题的每个可能的编码答案都有实际答案。数据被设置为一个列表,该列表是针对上下文构建的:
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循环也无法获得最佳结果。
答案 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
然后使用lapply
和match
进行替换
lapply(myanswers, function(x) lookup$values[match(x, lookup$ind)])
#$a
#[1] "Yes"
#
#$b
#[1] "Maybe"