以下函数返回一个包含两列的 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)
之间使用一个 int 的内存块。和 max(t)
(将所有内容包装在一个类中)。
最佳答案
列联表实际上是数组(或矩阵),可以很容易地创建。dimnames 保存值,数组/矩阵在其“核心”保存计数数据。 “table”和“tapply”功能是天生的创造者。您使用“[”访问计数并使用 dimnames() 后跟“[”来获取行和列名称。我会说使用“日期”类作为日期比存储在“字符” vector 中更明智。
关于c++ - 返回表值计数的最佳 R 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549644/