2017-05-26 71 views
0

我的问题很简单,有很多“答案”与lapply给我的东西,我不是在寻找。它们没有用处,因为我得到一个列表,然后必须做另一个循环来获取数据框,并且遇到同样的问题:使用序列化名称一次创建多个数据框。这就是为什么我要问一个新问题。R导入excel,从列表创建几个数据帧使用循环

我有一个Excel文件5张不同的图表,我想创建5个不同的数据框。

library(openxlsx) 

ln=list() 
for (i in 2:6) 
    { 
ln[[i]]<-read.xlsx("File.xlsx", sheet=i-1, startRow=3) 

} 

然后,我知道我可以做:

mo_1<-data.frame(ln[[2]]) 

,它看起来像它会给我正确的表文件。 但是,我需要为所有工作表执行此操作。我的尝试是:

for (i in 2:6){ 
    mo_[i]<-data.frame(ln[[i]]) 
} 

这就给我带来了和以前一样的问题。 P

所以我需要5个文件:mo2,...,mo6,我希望它们是DATAFRAMES(不是列表)。

谢谢。

只是为了补充为什么其他解决方案不起作用: - 他们似乎没有制作框架,他们似乎在不停地制作列表,看起来我必须手动进行转换。

另一种表述这个问题的方法是如何使用循环从列表创建数据帧。

+0

提的是现有的答案,在那里没有解释为什么他们不帮忙,是没有用的。 –

+0

更好,但如果不解释哪些解决方案无法解释哪些措施,则仍难以说明您所指的内容。 –

+0

您的变量'ln'是数据框的列表,因此最容易以'ln [[]]'符号访问每个数据框。如果你真的想使用一系列新的变量名,那么使用'assign'函数。看到相关的帖子:https://stackoverflow.com/questions/24699989/r-dynamically-create-a-variable-name。我相信:'assign(paste0(“mo”,i),ln [[i]])是你正在寻找的东西。 – Dave2e

回答

0

重新考虑lapply解决方案,因为您可以使用list2env将已命名的数据帧列表中的元素输出到单独的对象中。只要确保命名与setNames之前的元素:

library(openxlsx) 

ln <- lapply(2:6, function(i) read.xlsx("File.xlsx", sheet=i-1, startRow=3))  
ln <- setNames(ln, paste0("mou_", 1:5)) 

list2env(ln, envir=.GlobalEnv) 

随着中说,有没有真正的理由有独立对象的工作,你仍然可以使用列表DF操作,尤其是当你评论可以有50这些数据框听起来像是保持着类似的结构。只是管理一个对象,而不是很多:

merge(ln$mou_1, ln$mou_2, by="id") 

aggregate(.~group1 + group2, ln$mou_3, FUN=sum) 

rbind(ln$mou_4, ln$mou_5) 
+0

非常感谢您的回答,但这并没有解决这个问题。 – Allan

+0

这为什么不解决这个问题?你是否运行过代码?如图所示,'lapply'将Excel工作表导入数据框列表,其中'list2env'输出列表元素以分离数据框对象。这正是答案,*如何使用循环从列表创建数据框。*顺便说一下,'lapply'是一个循环! – Parfait

相关问题