帮助国威匹配数据

读取候选数据并将日期数据分成日期和时间2个变量

# read data
sb <- read.csv("D:/R/Practise/Time_data/data/sb.csv")
# View(sb)
str(sb)
## 'data.frame':    6 obs. of  16 variables:
##  $ Type    : int  2 3 2 3 2 3
##  $ Obs.    : int  1 1 2 2 3 3
##  $ Label   : int  1 1 1 1 1 1
##  $ Etime   : num  0 59.5 0 59.5 0 59.5
##  $ Date    : Factor w/ 3 levels "1/22/2015 10:39",..: 1 1 2 2 3 3
##  $ Tcham   : num  1.8 1.99 1.9 1.98 1.76 1.87
##  $ Pressure: num  81 81.1 81.1 81.1 81.1 ...
##  $ H2O     : num  5.29 5.5 5.33 5.55 5.27 ...
##  $ CO2     : num  429 430 429 430 429 ...
##  $ Cdry    : num  432 432 431 432 432 ...
##  $ RH      : num  61.4 63 61.4 63.5 61.4 ...
##  $ T4      : num  2.83 2.73 2.79 2.7 2.67 2.67
##  $ dCdry.dt: num  0.008 0.006 0.05 0.007 0.009 0.004
##  $ Flux    : num  0.1056 0.0791 0.6596 0.0923 0.1188 ...
##  $ Area    : num  37.2 37.2 37.2 37.2 37.2 ...
##  $ Vtotal  : num  1393 1393 1393 1393 1393 ...
# split sb$Date by space
sbDate <- as.data.frame(strsplit(as.character(sb$Date), "\\s+"))
sbDate <- t(sbDate)
sb$Time <- as.numeric(gsub("[: -]", "" , sbDate[,2] , perl=TRUE))

生成一个间隔10min的时间序列,并去掉中间的分号

# yield time sequence by 10 min
library(chron)
## Warning: package 'chron' was built under R version 3.3.3
tt <- times(0:(24 * 6 - 1)/(24 * 6))
# tt rm :
tt <- substr(tt, 1, 5)
end <- gsub("[: -]", "", tt, perl = TRUE)
end <- as.numeric(end)
time_intval <- data.frame(index = 1:144, time = end)

匹配候选数据中的时间和时间序列,以时间序列的index作为共同变量进行后续匹配

for (i in 1:dim(sb)[1]) {
    for (j in 1:dim(time_intval)[1]) {
        if (sb$Time[i] > time_intval$time[j] & sb$Time[i] <= time_intval$time[j + 
            1]) {
            sb$time_indx[i] <- time_intval$index[j]
        }
    }
    cat("\n", "---------", "i=", i, "j=", j, "---------")
}
## 
##  --------- i= 1 j= 144 ---------
##  --------- i= 2 j= 144 ---------
##  --------- i= 3 j= 144 ---------
##  --------- i= 4 j= 144 ---------
##  --------- i= 5 j= 144 ---------
##  --------- i= 6 j= 144 ---------

读取气候数据,即参照数据

TA_2015 <- read.csv("D:/R/Practise/Time_data/data/TA_2015.csv")
str(TA_2015)
## 'data.frame':    52560 obs. of  3 variables:
##  $ Date: Factor w/ 365 levels "1/1/2015","1/10/2015",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Time: Factor w/ 288 levels "0:01","0:02",..: 2 4 6 8 10 12 14 16 18 20 ...
##  $ TA  : num  -10.2 -10.2 -10.3 -10.6 -10.6 ...
TA_2015$Time <- as.character(TA_2015$Time)
TA_2015$Time2 <- as.numeric(gsub("[: -]", "", TA_2015$Time, perl = TRUE))
TA_2015$time_indx
## NULL
# add time interval
TA_2015$time_indx <- rep(1:144, 365)

完成候选数据和参照数据进行匹配的函数

# filename <- 'sb.csv'
match_climate <- function(filename) {
    df <- read.csv(filename)
    # split df$Date by space
    dfDate <- as.data.frame(strsplit(as.character(df$Date), "\\s+"))
    dfDate <- t(dfDate)
    df$Time <- as.numeric(gsub("[: -]", "", dfDate[, 2], perl = TRUE))
    # for loop
    for (i in 1:dim(df)[1]) {
        for (j in 1:dim(time_intval)[1]) {
            if (df$Time[i] > time_intval$time[j] & df$Time[i] <= time_intval$time[j + 
                1]) {
                df$time_indx[i] <- time_intval$index[j]
            }
        }
        cat("\n", "---------", "i=", i, "---------")
    }
    # match
    climate <- merge(TA_2015, df, by.x = "time_indx", by.y = "time_indx", all.x = T)
    names(climate)
    save_file_name <- paste("climate", filename, sep = "_")
    write.csv(climate, file = save_file_name)
}
# run the functions match_climate('sb.csv') save important objectives
# save(TA_2015,time_intval,match_climate,file = 'guowei_match0414.Rdata')