1

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

例如,数据集有许多字符串变量,例如(例如,“男性”、“女性”),如果这些变量可以作为因子导入,我就可以使用如下命令加载数据集,

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")
4

1 回答 1

0

两点。

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

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

第二个是,如果内存是一个问题,那么老实说,您可能不想从 large_table 导入大量行并在客户端中对其进行分析。您可能希望在数据库中进行增量分析。不知道自己在做什么,很难说。但是,您可能想研究聚合、窗口函数,可能还有 PL/R。

于 2013-11-18T05:01:59.927 回答