我一直试图解决这个问题,但一直未能做到这一点。我发现了很多类似的问题,根本没有帮助。
我在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条记录。我做错了什么?
答案 0 :(得分:2)
您可以使用xts
包非常轻松地获取计数/分钟。
install.packages("xts")
require("xts")
results_xts <- xts(results$count, order.by = as.POSIXlt(results$dates))
这会将您的数据帧转换为xts对象。 apply.daily
中有许多函数(apply.yearly
,xts
等)将函数应用于不同的时间范围,但没有一个一分钟的函数。幸运的是,这些函数的代码非常简单,所以只需运行
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)
让我打破它(因为那里嵌套了很多东西)。
然后我们找到开始和结束我们的会议记录
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秒