我有以下嵌套列表:
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
我想将它们转换为小标题。
`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)
,但没有显示行名。
答案 0 :(得分:1)
这是tidyverse
的一种方法。由于列表中有数字矢量,因此我们首先将其转换为小节,使用bind_rows
将小节列表合并为一个数据帧,以长格式获取数据,将其恢复为宽格式,从而更改列名,并将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
答案 1 :(得分:1)
我们可以使用unnest_wider
library(tidyr)
library(purrr)
tibble(col1 = map(l, as.list)) %>%
unnest_wider(col1) %>%
t
或者使用transpose
和purrr
中的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