2016-08-12 52 views
0

我有一個數據框有2個變量:「時間」和「溫度」。變量「time」具有以下格式:「%Y-%m-%d%H:%M:%S」。我想計算每個晝夜的平均溫度。日夜應定義爲日出和日落時間,這些時間存儲在第二個數據框中。這意味着每個晝夜都有不同的開始和結束時間。計算行意味着另一個數據框中定義的間隔?

所以我的問題是:我怎樣才能計算日出和日落時間定義的每個日夜,日夜的平均溫度?

含有溫度下的第一數據幀看起來像這樣:

time_temp_data <- data.frame(
    time = seq(
    as.POSIXct("2013-05-24 15:01:01"), 
    as.POSIXct("2013-06-02 03:31:01"), 
    by = "3 min" 
    ), 
    temp = seq(7.153, 36.809, length.out = length(time)) 
) 

並且含有日出和日落時間的第二數據幀看起來像這樣:

sunrise_sunset <- data.frame(
    event = rep(c("sunrise", "sunset"), 21), 
    time = as.POSIXct(c("2013-05-18 03:59:01", "2013-05-18 22:07:01", "2013-05- 19 03:57:01", "2013-05-19 22:09:01", "2013-05-20 03:55:01", 
          "2013-05-20 22:11:01", "2013-05-21 03:53:01", "2013-05-21 22:13:01", "2013-05-22 03:51:01", "2013-05-22 22:15:01", 
          "2013-05-23 03:49:01", "2013-05-23 22:18:01", "2013-05-24 03:47:01", "2013-05-24 22:20:01", "2013-05-25 03:45:01", 
          "2013-05-25 22:22:01", "2013-05-26 03:44:01", "2013-05-26 22:24:01", "2013-05-27 03:42:01", "2013-05-27 22:26:01", 
          "2013-05-28 03:40:01", "2013-05-28 22:27:01", "2013-05-29 03:38:01", "2013-05-29 22:29:01", "2013-05-30 03:37:01", 
          "2013-05-30 22:31:01", "2013-05-31 03:35:01", "2013-05-31 22:33:01", "2013-06-01 03:34:01", "2013-06-01 22:35:01", 
          "2013-06-02 03:32:01", "2013-06-02 22:36:01", "2013-06-03 03:31:01", "2013-06-03 22:38:01", "2013-06-04 03:30:01", 
          "2013-06-04 22:40:01", "2013-06-05 03:29:01", "2013-06-05 22:41:01", "2013-06-06 03:28:01", "2013-06-06 22:42:01", 
          "2013-06-07 03:28:01", "2013-06-07 22:44:01")) 

) 

一種方法是合併兩個數據幀。但是,我的兩個數據幀(「時間」)的公共變量沒有完全相同的數據。理想的情況是使用邏輯運算符合並數據幀(≥,≤),但我沒有設法做到這一點。

編輯
問題已被修改,不再被認爲是過於寬泛。這個例子可以用在盒子外面。

+1

請看[這裏](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。請提供您的數據示例 –

+0

@Steve_Corrin現在我編輯了我的問題並提供了我的數據示例,它又如何再次打開? –

回答

1

該解決方案使用處理數據幀的dplyr包,日期時間操作的lubridate和管道命令的magrittr

library(dplyr) 
library(lubridate) 
library(magrittr) 

下面是一個例子數據集:

time_temp_data <- data.frame(
    time = seq(
    as.POSIXct("2016-08-11"), 
    as.POSIXct("2016-08-12 23:00:00"), 
    by = "1 hour", 
), 
    temp = rnorm(48) 
) 
sunrise_sunset_data <- data.frame(
    sunrise = as.POSIXct(c("2016-08-11 05:59:30", "2016-08-12 06:00:30")), 
    sunset = as.POSIXct(c("2016-08-11 21:00:30", "2016-08-12 20:59:30")) 
) 

首先我們添加列(「突變」)的數據集的日期時間分成日期和時間。

time_temp_data %<>% 
    mutate_(
    date = ~ floor_date(time, "day"), 
    time_of_day = ~ difftime(time, date, "hours") 
) 

sunrise_sunset_data %<>% 
    mutate_(
    date = ~ floor_date(sunrise, "day"), 
    time_of_sunrise = ~ difftime(sunrise, date, "hours"), 
    time_of_sunset = ~ difftime(sunset, date, "hours") 
) 

然後,我們的時間/溫度數據加入到日出/日落數據:

all_data <- inner_join(time_temp_data, sunrise_sunset_data, by = "date") 

夜間時間是一天中的時間是在日落之後,或日出前。

all_data %<>% 
    mutate_(
    is_night = ~ time_of_day > time_of_sunset | time_of_day < time_of_sunrise 
) 

現在,每個日期和天平均氣溫/夜間可以通過對這些變量分組和彙總計算統計計算。

all_data %>% 
    group_by_(~ date, ~ is_night) %>% 
    summarize_(mean_temp = ~ mean(temp)) 
相關問題