作为Flatten list and push list key to vector on second level 的后续问题,我现在正在寻找一种有效的方法来扭转之前描述的过程。总之,我需要重新构建一个平面列表:
> str(myList)
List of 9
$ ID : num [1:2] 13454 13455
$ subjectId : num [1:2] 187 188
$ procedureId : num [1:2] 3 3
$ procedureSampleId: num [1:2] 3 3
$ timestamp : chr [1:2] "2017-04-21T17:15:10.911Z" "2017-04-21T17:15:10.913Z"
$ n001 : num [1:2] -999 -999
$ n002 : num [1:2] -999 -999
$ gender : num [1:2] 1 -999
$ age : num [1:2] 18 28
到此:
$ 13454:List of 8
..$ subjectId : num 187
..$ procedureId : num 3
..$ procedureSampleId: num 3
..$ timestamp : chr "2017-04-21T17:15:10.911Z"
..$ n001 : num -999
..$ n002 : num -999
..$ gender : num 1
..$ age : num 18
$ 13455:List of 8
..$ subjectId : num 188
..$ procedureId : num 3
..$ procedureSampleId: num 3
..$ timestamp : chr "2017-04-21T17:15:10.913Z"
..$ n001 : num -999
..$ n002 : num -999
..$ gender : num -999
..$ age : num 28
而每个ID
列应该是它自己的列表。到目前为止,我一直在使用for
- 循环来完成此任务,但结果却非常低效。
可重复的代码:
myList <- list('ID' = c(13454,13455), 'subjectId' = c(187,188), 'procedureId' = c(3,3), 'procedureSampleId' = c(3,3), 'timestamp' = c("2017-04-21T17:15:10.911Z", "2017-04-21T17:15:10.913Z"), 'n001' = c(-999,-999), 'n002' = c(-999,-999), 'gender' = c(1,-999), 'age' = c(18,28))
答案 0 :(得分:1)
基础R替代方案是使用嵌套的lapply
和setNames
将ID添加为外层列表名称。
myNestList <- setNames(lapply(1:2,
function(i) lapply(myList[-1], "[", i)), myList[[1]])
导致
str(myList)
List of 2
$ :List of 8
..$ subjectId : num 187
..$ procedureId : num 3
..$ procedureSampleId: num 3
..$ timestamp : chr "2017-04-21T17:15:10.911Z"
..$ n001 : num -999
..$ n002 : num -999
..$ gender : num 1
..$ age : num 18
$ :List of 8
..$ subjectId : num 188
..$ procedureId : num 3
..$ procedureSampleId: num 3
..$ timestamp : chr "2017-04-21T17:15:10.913Z"
..$ n001 : num -999
..$ n002 : num -999
..$ gender : num -999
..$ age : num 28