将矩阵列表转换为 data.frame,其中 row.names 作为列表名称

Emi*_*hez 4 r list matrix

我有一个矩阵列表,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 中进行此数据转换有什么建议吗?

此致

akr*_*run 5

我们通过循环将 'start' 元素提取到一个两列的 data.frameliststack

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)