计算R中数据帧的每分钟计数总和

时间:2014-10-08 23:45:05

标签: r mongodb statistics rjson

我一直试图解决这个问题,但一直未能做到这一点。我发现了很多类似的问题,根本没有帮助。

我在R的数据框中有大约43000条记录。日期列的格式为“2011-11-15 02:00:01”,另一列是计数。数据框的结构:

str(results)
'data.frame':   43070 obs. of  2 variables:
 $ dates: Factor w/ 43070 levels "2011-11-15 02:00:01",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ count: num  1 2 1 1 1 1 2 3 1 2 ...

如何获得每分钟的总计数?

我还想将results数据框转换为json。我使用rjson包将整个数据帧转换为单个json元素。当我插入mongodb时,只有_id表示所有43000条记录。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用xts包非常轻松地获取计数/分钟。

install.packages("xts")
require("xts")
results_xts <- xts(results$count, order.by = as.POSIXlt(results$dates))

这会将您的数据帧转换为xts对象。 apply.daily中有许多函数(apply.yearlyxts等)将函数应用于不同的时间范围,但没有一个一分钟的函数。幸运的是,这些函数的代码非常简单,所以只需运行

即可
ep <- endpoints(results_xts, "minutes")
period.apply(results_xts, ep, FUN = sum)

抱歉,我不知道您的其他问题的答案。

答案 1 :(得分:1)

星号在这里,未经测试,但这是我的每分钟计数的解决方案,也许有人会在json部分插话,我不熟悉

这是我的示例时间序列和计数

tseq<-seq(now,length.out=130, by="sec")
count<-rep(1, 130)

我们通过以下

找到我们的分钟切换位置的索引
mins<-c(0,diff(floor(cumsum(c(0,diff(tseq)))/60)))
indxs<-which(mins%in%1)

让我打破它(因为那里嵌套了很多东西)。

  1. 首先我们对时间序列进行区分,然后在前面添加一个0,因为我们丢失了diff
  2. 的观察结果
  3. 其次,对差异向量求和,给出每个点的秒值(这也可以通过对时间向量的简单格式调用来完成)。
  4. 第三,将该矢量(现在是每个点的秒数)除以60,这样我们就得到了与分钟相对应的每个点的值。
  5. 第四,把它弄平,所以我们得到整数
  6. 差异向量,所以我们得到0除了分钟切换的1分钟
  7. 向该向量添加0,因为我们丢失了diff
  8. 的观察结果
  9. 然后通过哪个电话
  10. 获取1的差额

    然后我们找到开始和结束我们的会议记录

    startpoints<-indxs
    endpoints<-c(indxs[2:length(indxs)], length(mins))
    

    然后我们简单地总结相应的子集

    mapply(function(start, end) sum(count[start:end]), start=startpoints, end=endpoints)
    #[1] 61 10
    

    我们得到第一点61,因为我们包括第一个子集的第0和第60秒