R 按ID列向列表添加维度
作为后续问题,我现在正在寻找一种有效的方法来逆转前面描述的过程。总之,我需要根据以下内容重新构造一个平面列表:R 按ID列向列表添加维度,r,R,作为后续问题,我现在正在寻找一种有效的方法来逆转前面描述的过程。总之,我需要根据以下内容重新构造一个平面列表: > 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 $ timestam
> 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))
myList一个选项是transpose
frompurr
library(tidyverse)
res <- myList %>%
transpose %>%
map(~.[-1])
names(res) <- myList[[1]]
库(tidyverse)
res%
转置%>%
映射(~.[1])
名称(res)一个基本的R选项是使用嵌套的lappy
和setNames
将ID添加为外部级别列表名称
myNestList <- setNames(lapply(1:2,
function(i) lapply(myList[-1], "[", i)), myList[[1]])
在您预期的输出中,当只有8个元素时,30个元素的列表似乎很奇怪。这项工作非常有效!谢谢:)很好,谢谢!我将此答案标记为解决方案,因为它不依赖于包
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