【发布时间】:2019-10-02 07:12:43
【问题描述】:
目前,我有多个同名且按运行顺序排列的数据帧(foo1、foo2、foo3、foo4、foo5... 等)。我正在尝试使用rbind() 创建一个包含上述数据框所有行的大型数据框。有没有一种优雅的方式来做到这一点,相当于rbind(foo1, foo2, foo3, foo4, foo5...)?
我试过do.call(rbind, paste0("foo",i)) 哪里i=c(1,2,3...) 无济于事。
有一个solution mentioned here,即:
do.matrix <- do.call(rbind, lapply( paste0("variable", 1:10) , get) )
然而,答案神秘地说“这是处理相关项目的错误方法。最好使用列表或数据框,但您可能会在适当的时候找出原因。”
为什么这样做是错误的方式,什么是“正确”的方式?
谢谢。
【问题讨论】:
-
他们所指的错误是首先创建单独的数据框
foo1、foo2等。如果您首先将它们全部放在一个列表中,您可以将该列表传递给do.call并完成它。 -
您很可能通过
assign创建了所有这些对象。不建议这样做,因为您可能会覆盖其他对象并且您可能无法有效地检索所有对象。最好初始化一个list,然后将它的每个元素设置为你的data.frames之一。无论如何,如果N是 data.frames 的数量,do.call(rbind,mget(paste0("foo",1:N)))应该可以在您的示例中使用。
标签: r