[英]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.