Следующая функция возвращает 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)
(оборачивая все это в класс).