是否可以将多个数据帧存储到一个数据结构中,然后由每个数据帧处理它?即例子
df1 <- data.frame(c(1,2,3), c(4,5,6))
df2 <- data.frame(c(11,22,33), c(44,55,66))
Run Code Online (Sandbox Code Playgroud)
..然后我想在数据结构中添加它们,这样我就可以遍历该数据结构,一次检索一个数据帧并进行处理,类似于
for ( iterate through the data structure) # this gives df1, then df2
{
write data frame to a file
}
Run Code Online (Sandbox Code Playgroud)
我在R中找不到任何这样的数据结构.任何人都可以指出任何代表相同功能的代码吗?
Pau*_*tra 12
把它data.frames放在一个列表中.一个优点是,它list与apply样式循环的效果非常好.例如,如果要保存data.frame,可以使用mapply:
l = list(df1, df2)
mapply(write.table, x = l, file = c("df1.txt", "df2.txt"))
Run Code Online (Sandbox Code Playgroud)
如果你喜欢apply风格循环(你会相信我:))请看看史诗plyr包.它可能不是最快的包装(寻找data.table快速),但它含有语法糖.
列表可用于保存几乎任何内容,包括data.frames:
## Versatility of lists
l <- list(file(), new.env(), data.frame(a=1:4))
Run Code Online (Sandbox Code Playgroud)
为了写出存储在列表中的多个数据对象,lapply()你的朋友是:
ll <- list(df1=df1, df2=df2)
## Write out as *.csv files
lapply(names(ll), function(X) write.csv(ll[[X]], file=paste0(X, ".csv")))
## Save in *.Rdata files
lapply(names(ll), function(X) {
assign(X, ll[[X]])
save(list=X, file=paste0(X, ".Rdata"))
})
Run Code Online (Sandbox Code Playgroud)
你要找的是一个list.您可以使用类似于lapply以相同方式处理每个数据框的函数.但是,在某些情况下,您可能需要将数据框列表传递给处理相互关联的数据框的函数.在这种情况下lapply没有帮助你.
这就是为什么重要的是要注意如何访问和迭代列表中的数据框.它是这样完成的:
mylist[[data frame]][row,column]
Run Code Online (Sandbox Code Playgroud)
请注意数据框索引周围的双括号.所以对于你的例子来说就是这样
df1 <- data.frame(c(1,2,3), c(4,5,6))
df2 <- data.frame(c(11,22,33), c(44,55,66))
mylist<-list(df1,df2)
Run Code Online (Sandbox Code Playgroud)
mylist[[1]][1,2]将返回4,而mylist[1][1,2]将返回NULL.我花了一段时间才找到这个,所以我觉得在这里发帖可能会有所帮助.
| 归档时间: |
|
| 查看次数: |
16291 次 |
| 最近记录: |