2014-10-08 118 views
0

我一直在試圖弄清楚這一點,但一直未能這樣做。我發現了很多類似的問題,根本沒有任何幫助。從R中的數據幀計算每分鐘計數的總和

我在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

可以使用xts包來獲取計數/分鐘0級和1/60秒很容易。

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

這會將您的數據幀轉換爲xts對象。xts中有許多函數(apply.daily,apply.yearly等),它們將函數應用於不同的時間範圍,但不是每分鐘都有一個函數。幸運的是,這些功能的代碼是超級簡單的,所以只是運行

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

對不起,我不知道你的其他問題的答案。

+0

謝謝。這工作完美無瑕,正是我所期待的。 – user1828605 2014-10-09 00:52:12

1

的Asterisk在這裏,未經檢驗的,但這裏是我得到的每分鐘計數的解決方案,也許有人會附和的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. 首先我們diff的隨時間序列,然後在前面加一個0,因爲我們失去與差異的觀察
  2. 其次,求和DIFF-ED矢量,使我們在每個點的秒值(此可能也可以通過簡單的格式調用遍歷時間向量來完成)
  3. 第三,將該向量(現在每個點的秒數)除以60,以便我們得到每個點對應分鐘的值。
  4. 四,地板,所以我們得到的整數
  5. 差異是矢量,所以我們得到的0除1的在微小開關
  6. 添加一個0到載體,因爲我們失去了一個觀察的差異
  7. 然後得到1個年代的indeces與它稱之爲

然後我們發現開始和結束時我們分

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第一點,因爲我們包括第一子集