首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取列表对象的名称,然后将该名称添加为每个列表的新列

获取列表对象的名称,然后将该名称添加为每个列表的新列
EN

Stack Overflow用户
提问于 2021-06-28 13:24:57
回答 2查看 42关注 0票数 1

我有一份数据帧列表。然后,我希望提取列表对象名称,并将其添加为dataframe中的第一列。THen我想取消列出,并创建一个单独的数据帧,逐行合并每个数据帧。它们都有相同的尺寸。

下面是我的数据帧列表中的一小部分

代码语言:javascript
运行
复制
mylist <- list(SiO2 = structure(c(5.121, 0.00836394378003293, 0.0199499373432604, 
5, 10, 1.87883863763252, 0.0836503954062112, 2.1240292640167), .Dim = c(1L, 
8L), .Dimnames = list(NULL, c("Analyte_Mean", "SDBetweenGroup", 
"SDWithinGroup", "replicates", "NumSamples", "FValue", "PValue", 
"FCritical"))), Al2O3 = structure(c(2.0812, 0.0053103672189408, 
0.0159059737205869, 5, 10, 0.442687747035557, 0.903289230024797, 
2.1240292640167), .Dim = c(1L, 8L), .Dimnames = list(NULL, c("Analyte_Mean", 
"SDBetweenGroup", "SDWithinGroup", "replicates", "NumSamples", 
"FValue", "PValue", "FCritical"))))

我用下面的代码来获取列表对象的名称。但是不确定如何将其作为每个dataframe的列传递回去

代码语言:javascript
运行
复制
names(mylist)

要制作一个数据帧,我有

代码语言:javascript
运行
复制
new_list <- as.data.frame(do.call(rbind, mylist)) 

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-28 13:34:24

如果我没理解错的话,我可能会使用purrr库。imap_dfr将把您的矩阵及其名称传递给函数,然后将结果绑定到单个数据帧中。

代码语言:javascript
运行
复制
library(purrr)

new_list <- imap_dfr(mylist, function(mat, name) {
  result <- as.data.frame(mat)
  result$name <- name
  result
})

给出

代码语言:javascript
运行
复制
> new_list
  Analyte_Mean SDBetweenGroup SDWithinGroup replicates NumSamples    FValue    PValue FCritical  name
1       5.1210    0.008363944    0.01994994          5         10 1.8788386 0.0836504  2.124029  SiO2
2       2.0812    0.005310367    0.01590597          5         10 0.4426877 0.9032892  2.124029 Al2O3
票数 2
EN

Stack Overflow用户

发布于 2021-06-28 13:35:26

您可以使用purrr::map_df -

代码语言:javascript
运行
复制
purrr::map_df(mylist, data.frame, .id = 'name')

#   name Analyte_Mean SDBetweenGroup SDWithinGroup replicates NumSamples
#1  SiO2       5.1210    0.008363944    0.01994994          5         10
#2 Al2O3       2.0812    0.005310367    0.01590597          5         10

#     FValue    PValue FCritical
#1 1.8788386 0.0836504  2.124029
#2 0.4426877 0.9032892  2.124029

或者在R基地-

代码语言:javascript
运行
复制
do.call(rbind, Map(cbind.data.frame, mylist, name = names(mylist)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68157970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档