R 如何将嵌套列表名转换为具有行名的TIBLE

R 如何将嵌套列表名转换为具有行名的TIBLE,r,dataframe,tidyverse,R,Dataframe,Tidyverse,我有以下嵌套列表: l <- list(`1` = c(Fn1 = 85.3820037423659, Sema3c = 0.0362596376899117, App = 8.08423415658745), `3` = c(Fn1 = 11.0051859200698, Sema3c = 0, App = 44.0000000000306), `4` = c(Fn1 = 3.4594316186373, Sema3c = 0, App = 6.54280428377643))

我有以下嵌套列表:

l <- list(`1` = c(Fn1 = 85.3820037423659, Sema3c = 0.0362596376899117, 
App = 8.08423415658745), `3` = c(Fn1 = 11.0051859200698, Sema3c = 0, 
App = 44.0000000000306), `4` = c(Fn1 = 3.4594316186373, Sema3c = 0, 
App = 6.54280428377643))
我想把它们转换成tibble

               `1`   `3`   `4`

  Fn1      85.4     11.0  3.46
  Semac3    0.0363   0    0   
  App      8.08    44.   6.54
我怎样才能做到这一点


我尝试了
tibble::as_tibble(l)
,但它没有显示行名。

这里是使用
tidyverse
的一种方法。由于列表中有一个数字向量,我们首先将其转换为一个TIBLE,使用
bind_rows
将TIBLE列表合并为一个数据帧,以长格式获取数据,将其恢复为宽格式更改列名,并将
name
列转换为行名

library(tidyverse)

map(l, ~as_tibble(t(.x))) %>%
    bind_rows(.id = 'id') %>%
    pivot_longer(cols = -id) %>%
    pivot_wider(names_from = id, values_from = value) %>%
    column_to_rownames('name')

#             1  3    4
#Fn1    85.3820 11 3.46
#Sema3c  0.0363  0 0.00
#App     8.0842 44 6.54

下面是使用
tidyverse
的一种方法。由于列表中有一个数字向量,我们首先将其转换为一个TIBLE,使用
bind_rows
将TIBLE列表合并为一个数据帧,以长格式获取数据,将其恢复为宽格式更改列名,并将
name
列转换为行名

library(tidyverse)

map(l, ~as_tibble(t(.x))) %>%
    bind_rows(.id = 'id') %>%
    pivot_longer(cols = -id) %>%
    pivot_wider(names_from = id, values_from = value) %>%
    column_to_rownames('name')

#             1  3    4
#Fn1    85.3820 11 3.46
#Sema3c  0.0363  0 0.00
#App     8.0842 44 6.54

我们可以更广泛地使用
unnest\u

library(tidyr)
library(purrr)
tibble(col1 = map(l, as.list)) %>% 
       unnest_wider(col1) %>% 
       t

或者从
purr
map

library(tibble)
transpose(l) %>% 
    map_df(~ .x, .id = 'grp') %>%
    column_to_rownames('grp')
#               1        3        4
#Fn1    85.38200374 11.00519 3.459432
#Sema3c  0.03625964  0.00000 0.000000
#App     8.08423416 44.00000 6.542804

我们可以更广泛地使用
unnest\u

library(tidyr)
library(purrr)
tibble(col1 = map(l, as.list)) %>% 
       unnest_wider(col1) %>% 
       t

或者从
purr
map

library(tibble)
transpose(l) %>% 
    map_df(~ .x, .id = 'grp') %>%
    column_to_rownames('grp')
#               1        3        4
#Fn1    85.38200374 11.00519 3.459432
#Sema3c  0.03625964  0.00000 0.000000
#App     8.08423416 44.00000 6.542804

难道不仅仅是
data.frame(l,check.names=FALSE)
有效吗,或者我在这里遗漏了一些复杂性?一个
data.frame
不过是引擎盖下的一个
list
。@thelatemail Oops..**facepalm**。你说得对,
l
是一个向量列表,这让我很困惑。你应该加上它作为答案。@onyanbu-如果没有它,我会得到
X1,X3,X4
作为名称。不只是
data.frame(l,check.names=FALSE)
起作用吗,或者我在这里缺少了一些复杂性?一个
data.frame
不过是引擎盖下的一个
list
。@thelatemail Oops..**facepalm**。你说得对,
l
是一个向量列表,这让我很困惑。你应该加上它作为答案。@onyanbu-没有它,我就得到
X1,X3,X4
作为名字。