2017-06-17 30 views
0

我有使用NO2傳感器收集的NO2實時數據。數據每秒鐘記錄48小時NO2。在不同的家中測量NO248小時。有超過50,000行和三列。 Here a snapshot.計算R中的指定小時平均值

Homes Time  ppb 
Home 1 12:00 AM 6 
Home 1 12:01 AM 6 
Home 1 12:02 AM 7 
Home 1 12:03 AM 6 
Home 1 12:04 AM 7 
Home 1 12:05 AM 9 
Home 1 12:06 AM 8 
Home 2 12:00 AM 2 
Home 2 12:01 AM 3 
Home 2 12:02 AM 4 
Home 2 12:03 AM 1 
Home 2 12:04 AM 6 
Home 2 12:05 AM 4 
Home 2 12:06 AM 8 

我想創建一個新的數據集,這將有每小時(12,下午1時許,等等),而不是NO2每秒的平均值。我想讓凌晨1點到凌晨1點的平均時間爲1點,並繼續保持這種趨勢。

我嘗試了一些方法,但我還沒有想到如何做到這一點。 group_by和summary函數爲我提供了整個數據集的平均時間(例如凌晨1點,凌晨2點),但我希望根據家庭數字計算小時平均值。

我試圖用一個循環,沒有工作:

Avg = data.frame(Sensor_analysis)  
head(Avg)  
Hourly = rep(0, 48)  
for (i in 1:48) { 
    Hourly[i] = mean(Avg$ppb[60*(i-1)+1:60*i]) 
} 
Hourly 
+0

你可以使用'cut'我猜。 也看看[那裏](https://stackoverflow.com/questions/17389533/aggregate-values-of-15-minute-steps-to-values-of-hourly-steps) – user2100721

+0

你能提供一個複製和粘貼版本的數據?只要運行dput(head(Sensor_analysis))'。 – RoyalTS

+0

@RoyalTS我在R中運行dput(head(Sensor_analysis)),接下來我要做什麼來使它在此平臺上覆制和粘貼? – Ophir

回答

1

你的問題實在是很遠很遠從一個完全重複的例子的理想,但這種嘗試對大小:

library(dplyr) 
library(lubridate) 

Sensor_analysis %>% 
    mutate(hour = ceiling_date(Time, 'hour')) %>% 
    group_by(Homes, hour) %>% 
    summarize(hourly = mean(ppb)) -> Hourly 

根據您Time變量是如何存儲你可能首先必須將它要麼轉換爲POSIXcthms這個工作

+0

謝謝@RoyalTS它的工作。我想知道小時平均值是如何計算的。在我運行代碼後,我發現它每小時給出一次(例如1:00和2:00)的平均值。這是1:00-1:59的平均濃度嗎?我將結果與我在Excel中手動完成的結果進行了比較,但結果不同。另一個問題,我想要其他變量在我們創建的新數據集中。原始數據集有10列(家庭,時間,ppb,熱量,通風,廚師,TRAP,Dst_Hwy,Dst_Int,卡車)。 – Ophir