gpt4 book ai didi

r - 按 ID 获取成对子列表中的行

转载 作者:行者123 更新时间:2023-12-04 12:17:20 24 4
gpt4 key购买 nike

这可能是一个棘手的问题:

我需要重组一个列表,其中包含未知数量的子列表(尽管示例数据中有 2 个)。但是,每个子列表都包含一个 ID -柱子。每个ID在任何子列表中,我现在需要创建一个列表,其中包含 ID 所在的行匹配 ID在子列表中,但还有它的 sibling 中的相应行。

这是我最初的 list :

> str(myList1)
List of 2
$ 1:'data.frame': 2 obs. of 5 variables:
..$ ID : num [1:2] 13369 13599
..$ subject: num [1:2] 2 2
..$ gender : num [1:2] 1 1
..$ age : num [1:2] 18 18
..$ score : num [1:2] 30 28
$ 2:'data.frame': 2 obs. of 5 variables:
..$ ID : num [1:2] 13370 14342
..$ subject: num [1:2] 3 3
..$ gender : num [1:2] 1 1
..$ age : num [1:2] 28 28
..$ score : num [1:2] 27 32

这是我希望得到的结果:
> str(myList2)
List of 4
$ 13369:List of 2
..$ 1:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 13369
.. ..$ subject: num 2
.. ..$ gender : num 1
.. ..$ age : num 18
.. ..$ score : num 30
..$ 2:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 13599
.. ..$ subject: num 2
.. ..$ gender : num 1
.. ..$ age : num 18
.. ..$ score : num 28
$ 13370:List of 2
..$ 1:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 14342
.. ..$ subject: num 3
.. ..$ gender : num 1
.. ..$ age : num 28
.. ..$ score : num 27
..$ 2:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 13370
.. ..$ subject: num 3
.. ..$ gender : num 1
.. ..$ age : num 28
.. ..$ score : num 32
$ 13599:List of 2
..$ 1:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 13369
.. ..$ subject: num 2
.. ..$ gender : num 1
.. ..$ age : num 18
.. ..$ score : num 30
..$ 2:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 13599
.. ..$ subject: num 2
.. ..$ gender : num 1
.. ..$ age : num 18
.. ..$ score : num 28
$ 14342:List of 2
..$ 1:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 14342
.. ..$ subject: num 3
.. ..$ gender : num 1
.. ..$ age : num 28
.. ..$ score : num 27
..$ 2:'data.frame': 1 obs. of 5 variables:
.. ..$ ID : num 13370
.. ..$ subject: num 3
.. ..$ gender : num 1
.. ..$ age : num 28
.. ..$ score : num 32

我完全不知道如何实现这一点,甚至不知道该从哪里指导我对这个问题的研究。

可重现的代码:
myList1 <- list(
'1' = data.frame('ID' = c(13369,13599), 'subject' = c(2,2), 'gender' = c(1,1), 'age' = c(18,18), 'score' = c(30,28)),
'2' = data.frame('ID' = c(13370,14342), 'subject' = c(3,3), 'gender' = c(1,1), 'age' = c(28,28), 'score' = c(27,32))
)

如果需要,结果的可重现代码:
myList2 <- list(
'13369' = list('1' = data.frame('ID' = 13369, 'subject' = 2, 'gender' = 1, 'age' = 18, 'score' = 30), '2' = data.frame('ID' = 13599, 'subject' = 2, 'gender' = 1, 'age' = 18, 'score' = 28)),
'13370' = list('1' = data.frame('ID' = 14342, 'subject' = 3, 'gender' = 1, 'age' = 28, 'score' = 27), '2' = data.frame('ID' = 13370, 'subject' = 3, 'gender' = 1, 'age' = 28, 'score' = 32)),
'13599' = list('1' = data.frame('ID' = 13369, 'subject' = 2, 'gender' = 1, 'age' = 18, 'score' = 30), '2' = data.frame('ID' = 13599, 'subject' = 2, 'gender' = 1, 'age' = 18, 'score' = 28)),
'14342' = list('1' = data.frame('ID' = 14342, 'subject' = 3, 'gender' = 1, 'age' = 28, 'score' = 27), '2' = data.frame('ID' = 13370, 'subject' = 3, 'gender' = 1, 'age' = 28, 'score' = 32))
)

最佳答案

这应该可以解决问题:

purrr::flatten(
lapply(
myList1, function(l){
setNames(
apply(l, 1, function(x){
setNames(split(l, l$ID),seq_along(l$ID))}),
l$ID)}))

关于r - 按 ID 获取成对子列表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43847209/

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