gpt4 book ai didi

r - 将列表的特定子列表强制转换为基数为 R 的矩阵/数据框

转载 作者:行者123 更新时间:2023-12-02 05:41:56 25 4
gpt4 key购买 nike

我需要从列表的特定子列表创建数据框。我知道这个特定子列表中的数据结构是不变的。对于单个列表,我发现 do.call() 可以解决问题:

lst<-list(l1="aa", l2="ab", l3="ac")
fun.sublst1<-function(n) {
a<-c("a",1,n)
return(a)
}
lstoflst<-lapply(lst, fun.sublst1)
do.call(rbind,lstoflst) # create a data frame from a list

但是,如果我有一个包含列表的列表并且我想遍历特定的子列表,我将无法使用 do.call(rbind,lstoflst$A) 创建数据框。

# section list of list
fun.sublst2<-function(n) {
a<-c("a",1,n)
b<-c("b",2)
return(list(A=a,B=b))
}
lstoflst<-lapply(lst, fun.sublst2)
# result should create a dataframe consisting of all sublists $A
t(cbind(lstoflst$l1$A,lstoflst$l2$A,lstoflst$l3$A))

使用笨拙的代码,它看起来像那样。

dat<-t(as.data.frame(lstoflst[[1]][[1]]))
for(i in 2:length(lstoflst)) {
dat<-rbind(dat,t(lstoflst[[i]][[1]]))
}

有没有一种优雅的方法可以用基本的 R 来做到这一点?我猜 do.call(rbind,lstoflst, ???) 和其他一些参数就可以了。我想我需要传递索引或索引函数。有帮助吗?

我进行了搜索,但没有找到我的搜索词。可能它已经解决了。无论如何,希望你能指导我。谢谢

编辑: 更改了标题,因为我的示例结果只生成矩阵。

最佳答案

如果您知道所需列表组件的名称(在本例中为“A”),您可以将列表中的每个列表子集化:

lsSub <- lapply(lstoflst, "[[", "A")

然后是 rbind

do.call(rbind, lsSub)
# [,1] [,2] [,3]
# l1 "a" "1" "aa"
# l2 "a" "1" "ab"
# l3 "a" "1" "ac"

但正如 Joran 所指出的,那不是 data.frame

关于r - 将列表的特定子列表强制转换为基数为 R 的矩阵/数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com