Поиск значений в именованном списке для замены в другом именованном списке в R - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть список закодированных ответов на опрос, а также кодекс, в котором каждый возможный закодированный ответ на конкретный вопрос в указанном опросе содержит фактический ответ, сохраненный вместе с ним.Данные настроены как список, который строится примерно так для контекста:

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 голосов
/ 19 февраля 2019

Другой вариант, когда вы сначала создаете таблицу подстановки

(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"
0 голосов
/ 19 февраля 2019

Вы можете сделать это с помощью базы R и функции mapply, предполагая, что списки находятся в одном и том же порядке

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

, если это не так, вы можете Map над именами

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