【发布时间】:2016-07-14 23:02:09
【问题描述】:
我正在尝试使用 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
但是我得到了上面提到的错误
(错误:递归索引在级别 2 失败)
谁能解释为什么会失败?或者更好的是,想办法正确完成这项工作? 我有一种预感,可以使用 for 循环为每个列表创建单独的数据帧,然后使用 left_join 将每个系统帧的匹配索引添加到原始帧上,但这似乎效率很低,不优雅,笨重...
【问题讨论】: