r - 如何在 R 中将列表列表转换为整齐的 tibble 或 data.frame

标签 r tidy tidyverse

我有以下列表:

my_lol <- structure(list(coolfactor_score = list(structure(c(0.164477631065473, 
0.198253819406019, 0.396414447052519, 0.133118603987442, 0.107735498488546
), .Names = c("B", "Mac", "NK", "Neu", "Stro")), structure(c(0.186215537135912, 
0.18408529174803, 0.375349920115798, 0.247664923324821, 0.006684327675438
), .Names = c("B", "Mac", "NK", "Neu", "Stro"))), sr_crt = list(
    structure(list(crt = 0.133118603987442, sr = 0.407076876403305), .Names = c("crt", 
    "sr")), structure(list(crt = 0.18408529174803, sr = 0.0829181742326453), .Names = c("crt", 
    "sr"))), sample_names = c("Sample1", "Sample2")), .Names = c("coolfactor_score", 
"sr_crt", "sample_names"))

看起来像这样:

> my_lol
$coolfactor_score
$coolfactor_score[[1]]
        B       Mac        NK       Neu      Stro 
0.1644776 0.1982538 0.3964144 0.1331186 0.1077355 

$coolfactor_score[[2]]
          B         Mac          NK         Neu        Stro 
0.186215537 0.184085292 0.375349920 0.247664923 0.006684328 


$sr_crt
$sr_crt[[1]]
$sr_crt[[1]]$crt
[1] 0.1331186

$sr_crt[[1]]$sr
[1] 0.4070769


$sr_crt[[2]]
$sr_crt[[2]]$crt
[1] 0.1840853

$sr_crt[[2]]$sr
[1] 0.08291817



$sample_names
[1] "Sample1" "Sample2"
# Note that the number of samples can be more than 2 and cell type more than 5.

我怎样才能将它整理到这个数据框(tibbles)

CellType    Sample    CoolFactorScore  SR            CRT
B           Sample1   0.1644776        0.4070769     0.1331186
Mac         Sample1   0.1982538        0.4070769     0.1331186
NK          Sample1   0.3964144        0.4070769     0.1331186
Neu         Sample1   0.1331186        0.4070769     0.1331186
Stro        Sample1   0.1077355        0.4070769     0.1331186
B           Sample2   0.186215537      0.08291817    0.1840853
Mac         Sample2   0.184085292      0.08291817    0.1840853
NK          Sample2   0.375349920      0.08291817    0.1840853
Neu         Sample2   0.247664923      0.08291817    0.1840853
Stro        Sample2   0.006684328      0.08291817    0.1840853

最佳答案

使用基本 R 的一种方法:

mylist <- lapply(1:2, function(i) {
  #this is the important bit where you extract the corresponding elements
  #of sample 1 first and sample 2 second.
  df <- data.frame(lapply(my_lol, '[', i))
  names(df) <- c('CoolFactorScore', 'CRT', 'SR', 'Sample')
  df$CellType <- rownames(df)
  row.names(df) <- NULL
  df
})

do.call(rbind, mylist)

输出:

  CoolFactorScore       CRT         SR  Sample CellType
1      0.164477631 0.1331186 0.40707688 Sample1        B
2      0.198253819 0.1331186 0.40707688 Sample1      Mac
3      0.396414447 0.1331186 0.40707688 Sample1       NK
4      0.133118604 0.1331186 0.40707688 Sample1      Neu
5      0.107735498 0.1331186 0.40707688 Sample1     Stro
6      0.186215537 0.1840853 0.08291817 Sample2        B
7      0.184085292 0.1840853 0.08291817 Sample2      Mac
8      0.375349920 0.1840853 0.08291817 Sample2       NK
9      0.247664923 0.1840853 0.08291817 Sample2      Neu
10     0.006684328 0.1840853 0.08291817 Sample2     Stro

关于r - 如何在 R 中将列表列表转换为整齐的 tibble 或 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43756100/

相关文章:

r - ggplot 堆叠条形排序失败,函数 desc 未知

使用两个因子重新排列 R 中的矩阵

r - 有没有更好的方法将向量的每个元素与一组定义的间隔相匹配?

notepad++ - 使用 Tidy2 for Notepad++

开始时的 HTML Tidy 剥离空间

r - 将管道映射到 tidyverse 中的多个列

r - 如何按组计数并查找是否至少有一个观察值符合标准?

r - 它有一些功能专门用于处理 tibble 和管道衬里的副作用吗?

重新排列双向表

r - 将函数应用于数据框列表中的列并附加结果