Я пытаюсь использовать команду dplyr 'mutate' для выполнения сопоставления по списку массивов, но я получаю сообщение об ошибке «Ошибка: рекурсивная индексация не удалась на уровне 2». вот пример:Доступ к элементам списка в мутате
templist=list();templist[["A"]]=c(6,9,8,1);templist[["B"]]=c(1,9,6,8);templist[["C"]]=c(8,1,9,6)
tempdat=data.frame(SYSTEM=c("A","A","A","B","B","B","C","C","C"),nums=c(1,8,9,1,8,9,1,8,9))
который обеспечивает
templist
$A
[1] 6 9 8 1
$B
[1] 1 9 6 8
$C
[1] 8 1 9 6
и
tempdat
SYSTEM idnum
1 A 1
2 A 8
3 A 9
4 B 1
5 B 8
6 B 9
7 C 1
8 C 8
9 C 9
я тогда хочу е в позиции совпадающих номеров списки, соответствующие соответствующим системам. Например.
tempdat %>% mutate(numids=match(nums,templist[[SYSTEM]]))
должен давать
tempdat
SYSTEM nums numids
1 A 1 1
2 A 8 3
3 A 9 2
4 B 1 1
5 B 8 4
6 B 9 2
7 C 1 2
8 C 8 1
9 C 9 3
но я получаю упомянутые выше ошибки вместо
(Error: recursive indexing failed at level 2)
Может кто-нибудь объяснить, почему это не удается? Или еще лучше выяснить, как правильно это сделать? У меня есть догадка, что это можно сделать с помощью цикла for для создания отдельных кадров данных для каждого списка, а затем использовать left_join для добавления индексов соответствия из каждого системного фрейма в исходный фрейм, но это похоже на то, что это, вероятно, будет очень неэффективным , inelegant и clunky ...
Отлично! Работает как шарм. – wmsmith