我有一个矩阵列表,list1其结构如下:
$ENSLAFT00000000003
start end
[1,] 360 360
[2,] 394 394
$ENSLAFT00000000011
start end
[1,] 15 15
$ENSLAFT00000000020
start end
[1,] 45 45
$ENSLAFT00000000023
start end
$ENSLAFT00000000024
start end
[1,] 13 13
[2,] 369 369
[3,] 602 602
[4,] 775 775
[5,] 983 983
[6,] 1200 1200
[7,] 1491 1491
Run Code Online (Sandbox Code Playgroud)
有些项目是空的,但我想将此列表转换为具有两列和以下结构的 data.frame:
ID pos
ENSLAFT00000000003 360
ENSLAFT00000000003 394
ENSLAFT00000000011 15
ENSLAFT00000000020 45
ENSLAFT00000000024 13
ENSLAFT00000000024 369
ENSLAFT00000000024 602
ENSLAFT00000000024 775
ENSLAFT00000000024 983
ENSLAFT00000000024 1200
ENSLAFT00000000024 1491
Run Code Online (Sandbox Code Playgroud)
ENSLAFT00000000023 在输出中被省略,因为它在初始列表中是一个空矩阵。
我可以通过使用以下方法获得所需的结构,但不保留行名身份:
as.data.frame(do.call(rbind, e)[,1])
Run Code Online (Sandbox Code Playgroud)
但我仍然缺乏保留所需的行名。
您对在 R 中进行此数据转换有什么建议吗?
此致
我们通过循环将 'start' 元素提取到一个两列的 data.framelist中stack
out <- stack(lapply(lst1, \(x) {
st <- x[,"start"]
if(length(st) == 0) st <- NA_real_
st
}))[2:1]
names(out) <- c("ID", "pos")
Run Code Online (Sandbox Code Playgroud)