![](/img/trans.png)
[英]How to convert lists nested in a tibble into a single tibble with each list item on a new row?
[英]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
或者使用來自purrr
和map
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.