Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RPostgreSQL将字符串作为因子导入_R_Postgresql_Rpostgresql - Fatal编程技术网

使用RPostgreSQL将字符串作为因子导入

使用RPostgreSQL将字符串作为因子导入,r,postgresql,rpostgresql,R,Postgresql,Rpostgresql,我想从一个大的postgresql表导入数据。为了节省空间,我想自动将文本值转换为因子 例如,数据集有许多字符串变量,例如,Male、Female,如果这些变量可以作为因子导入,我就可以使用如下命令加载数据集: df <- dbGetQuery(con, "select id, gender from large.table")) 我不想接收像Male这样的行,而是想要像0这样的行,这样可以节省内存 如果您在您选择的数据库上尝试下面的查询,并让性别列等于字符列,您应该会看到df_larg

我想从一个大的postgresql表导入数据。为了节省空间,我想自动将文本值转换为因子

例如,数据集有许多字符串变量,例如,Male、Female,如果这些变量可以作为因子导入,我就可以使用如下命令加载数据集:

df <- dbGetQuery(con, "select id, gender from large.table"))
我不想接收像Male这样的行,而是想要像0这样的行,这样可以节省内存

如果您在您选择的数据库上尝试下面的查询,并让性别列等于字符列,您应该会看到df_large的大小要大得多

df <- dbGetQuery(con, "select id, gender from large.table"))

df_large <- df$gender
print(object.size(df_large), units="Kb")

df_small <- factor(df$gender)
print(object.size(df_small), units="Kb")
两点

首先,如果这是一个问题,那么案例就是你的答案

 SELECT id, case when gender = male then 1::int else 0 end as is_male from large_table;

第二个问题是,如果内存是一个问题,那么老实说,您可能不想从大型_表中导入大量行,并在客户端中对其进行分析。您可能希望在数据库中进行增量分析。不知道你在做什么,很难说。但是,您可能需要查看聚合、窗口函数,以及可能的PL/R。

我从未使用过RPostgreSQL,但基本上我使用的其他每个R db连接都会默认返回字符列作为因子。检查strdf以验证这些列是否真的是字符列而不是因数。一度因数确实节省了空间,但R的改进意味着不再如此。我怀疑是否有一种简单的方法可以做到这一点,而无需修改用C编写的fetch函数。RS_PostgreSQL_fetch函数返回data.frame包含字符。如果不修改该代码,您将始终以字符形式加载数据,然后修改为因子。此外,内存节省可能没有您想象的那么大;这可能不是一个有效的节省内存的方法。我想,总是会有选择id,大小写性别,当“男性”时,然后0或1结束于大表。这将使你的数字从数据库中消失,但上面的评论表明你在担心一个非问题。好的。我试过了,但这个理论似乎不起作用。您是否有足够的内存将其读入R,然后将字符列转换为因子?是的