gpt4 book ai didi

r - 在 mutate 中访问列表元素

转载 作者:行者123 更新时间:2023-12-05 01:18:56 25 4
gpt4 key购买 nike

我正在尝试使用 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 将匹配索引从每个系统帧添加到原始帧,但这看起来可能非常低效,不优雅,笨拙...

最佳答案

失败的原因是 [[ for list 不接受向量索引,传递给 mutate 函数的变量本质上是一个向量。一个快速修复方法是按 SYSTEM 对数据框进行分组,并将 unique 变量传递给它,因此对于每个组,SYSTEM 将是单个值向量的:

tempdat %>% group_by(SYSTEM) %>% mutate(numids=match(nums,templist[[unique(SYSTEM)]]))

# Source: local data frame [9 x 3]
# Groups: SYSTEM [3]
#
# SYSTEM nums numids
# (fctr) (dbl) (int)
# 1 A 1 4
# 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

如果您检查 templist[[c("A", "B", "A")]],您会发现它抛出的错误与您看到的完全相同:

Error in templist[[c("A", "B", "A")]] : recursive indexing failed at level 2

关于r - 在 mutate 中访问列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com