【发布时间】:2011-09-26 10:32:16
【问题描述】:
以下函数返回一个包含两列的 data.frame:
fetch_count_by_day=function(con){
q="SELECT t,count(*) AS count FROM data GROUP BY t"
dbGetQuery(con,q) #Returns a data frame
}
t 是一个 DATE 列,因此输出如下所示:
t count(*)
1 2011-09-22 1438
...
我真正感兴趣的是是否已经存在给定日期的任何记录;但我也会使用计数作为健全性检查。
在 C++ 中,我会返回 std::map<std::string,int> 或 std::unordered_map<std::string,int> (*)。
在 PHP 中,我会使用以日期为键的关联数组。
R 中最好的数据结构是什么?它是 2 列 data.frame 吗?我的第一个想法是将t 列转换为行名:
...
d=dbGetQuery(con,q)
rownames(d)=d[,1]
d$t=NULL
但是 data.frame 行名不是唯一的,所以从概念上讲它不太合适。我也不确定它是否可以更快地使用它。
(“最佳”的任何和所有定义:最快、最少内存、代码清晰、对有经验的 R 开发人员来说最不意外等。也许对所有人都有一个解决方案;如果没有,那么我想了解交易 -关闭以及何时选择每个备选方案。)
*:(对于 C++)如果基准测试显示这是一个瓶颈,我可能会将日期戳转换为 YYYYMMDD 整数并使用 std::unordered_map<int,int>;知道数据只涵盖了几年,我什至可能会在 min(t) 和 max(t) 之间使用每天一个 int 的内存块(将所有这些都包装在一个类中)。
【问题讨论】:
-
“data.frame 行名不是唯一的”是什么意思? From ?rownames: "对于一个数据框,‘rownames’的‘value’应该是一个不重复和不丢失名字的字符向量(这是强制的),”
-
您所说的“最佳”是什么意思?如果是搜索速度,那么
data.table可能是个好主意。 -
@mdsumner 我在这里解释和示例:r-bloggers.com/select-operations-on-r-data-frames 但他正在描述一个矩阵;数据框有什么不同吗?
-
@gsk3 “最佳”的任何和所有定义:最快、最少内存、代码清晰、对有经验的 R 开发人员来说最不意外等。也许所有人都有一个解决方案;如果不是,那么我想了解权衡以及何时选择每种替代方案。
-
你能把这个答案添加到你的问题中吗?
标签: c++ sql r data-structures