簡體   English   中英

將列表列表(包含矩陣)轉換為 R 中的 data.frame

[英]Transform a list of list (containing matrix) into a data.frame in R

我有一個列表列表,我想將其轉換為 data.frame。 “內部”列表中的某些元素包含一個矩陣,我想保留列及其名稱。

我使用lapply取得了相當大的進步,現在我得到了另一個具有這種模式的列表:

[[1]]
[[1]]$X
[1] 0.100

[[1]]$Y
                   VAL   LCI  UCI  
AB                 1000  500  1300 
CD                 30    10   400 

這種模式重復大約 200 行。

現在的問題是我想創建一個包含 4 列的 data.frame:X、VAL、LCI、UCI。 顯然我會有交替“AB”和“CD”的行,因為這些行名在我的列表中是固定的。

任何人都知道如何執行此操作? 這是一個可重現的示例 - 盡管不是很花哨,但此代碼生成的list1正是我需要在數據幀中轉換的對象:

#Create list x
var1 <- 0.100 
var1 <- list(var1)
names(var1) <- "x"

#Create list y
var2 <- matrix(1:6, nrow = 2)
rownames(var2) <- c("AB","CD")
colnames(var2) <- c("VAL","LCI","UCI")
var2 <- list(var2)
names(var2) <- "y"

#Create a second element
var3 <- 0.200
var3 <- list(var3)
names(var3) <- "x"

var4 <- matrix(7:12, nrow = 2)
rownames(var4) <- c("AB","CD")
colnames(var4) <- c("VAL","LCI","UCI")
var4 <- list(var4)
names(var4) <- "y"

#Create a list
list1 <- list(c(var1,var2),c(var3,var4))

不確定我是否完全理解您的要求,但我會嘗試一下! 所以,根據你的例子,請在下面找到一個reprex

正品

  • DFbindRows函數的DFbindRows
DFbindRows <- function(x){
  do.call(rbind, lapply(x, as.data.frame))
}
  • 測試您的數據列表上的功能list1
DF <- DFbindRows(list1)
#>       x y.VAL y.LCI y.UCI
#> AB  0.1     1     3     5
#> CD  0.1     2     4     6
#> AB1 0.2     7     9    11
#> CD1 0.2     8    10    12

注意:AB 或 CD 后面的數字是強制性的,因為在dataframe不允許有重復的行名稱

  • 檢查對象類
class(DF)
#> [1] "data.frame"

reprex 包(v2.0.1) 於 2021 年 11 月 10 日創建

暫無
暫無

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

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