我正在处理大型数据集,tidyr的spread
通常会给我错误消息,建议failure to obtain memory
执行该操作。
因此,我一直在探索dbplyr。但是,正如here所示(如下所示),dbplyr::spread()
不起作用。
我的问题是,在使用tidyr::spread
和tbl_dbi
数据时,是否有另一种方法可以完成tbl_sql
的工作而无需下载到本地内存。
使用下面的here中的示例数据,我将介绍我得到的以及我想做的和得到的。
#sample tbl_dbi和tbl_sql数据
df_sample <- tribble(~group1, ~group2, ~group3, ~identifier, ~value,
8, 24, 6, 'mt_0',
12, 18, 24, 6, 'mt_1', 4)
con <- DBI::dbConnect(RSQLite::SQLite(), "")
df_db <- copy_to(con, df_sample, 'df_sample')
#尝试传播tbl_dbi和tbl_sql而不下载到本地内存
//this does not work
df_db %>% spread(identifier, value)
Error in UseMethod("spread_") :
no applicable method for 'spread_' applied to an object of class "c('tbl_dbi', 'tbl_sql', 'tbl_lazy', 'tbl')"
#尝试下载到本地内存后传播tbl_dbi和tbl_sql
//this spreads the data but the output is in memory
//I would like to keep the output as 'tbl_dbi', 'tbl_sql', and 'tbl_lazy'
df_db %<>% collect() %>% spread(identifier, value)
class(df_db)
[1] "tbl_df" "tbl" "data.frame"
在此先感谢您的帮助