簡體   English   中英

如何將嵌套列表名稱轉換為帶有行名稱的 tibble

[英]How to convert nested list name into tibble with row names

我有以下嵌套列表:

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))

看起來像這樣:

$`1`
        Fn1      Sema3c         App 
85.38200374  0.03625964  8.08423416 

$`3`
     Fn1   Sema3c      App 
11.00519  0.00000 44.00000 

$`4`
     Fn1   Sema3c      App 
3.459432 0.000000 6.542804 

我想將它們轉換為 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一種方式。 由於列表中有一個數字向量,我們首先將其轉換為bind_rows ,使用bind_rows將 tibbles 列表合並為一個數據幀,以長格式獲取數據,將其恢復為寬格式,更改列名並轉換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_wider

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

或者使用來自purrrmap transpose

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM