2016-11-24 4 views
2

ホーボー駅から収集された大量の気象データがありますが、それには独自のソフトウェアがありますが、そこに処理するのは難しいです。だから、私はちょうどdescent data.frameのすべての情報を追加しましたが、今では毎時の結果を得る方法を学ぶために読んでいます。 Plyrと一緒に試してみて、パッケージ化はまだ成功していません。私はRの初心者のプログラマーで、通常はインターネット上の仕事のパッチからコードを構築しています。R - 一定周波数データ取得ではなく、時間平均を取得する

だから、私は既に持っていることは、次のとおりです。

data<-read.csv("file.txt",header=TRUE,sep=";",dec=".",stringsAsFactors=FALSE) 
    data<-data[-1,] 

    data$TIMETAMP <- strptime(data$TIMETAMP, format="%d-%m-%y %H:%M",   tz=Sys.timezone(location=TRUE)) 

    data$Vel_VIENTO<-as.numeric(as.character(data$Vel_VIENTO)) 
    data$Vel_RAFAGAS <-as.numeric(as.character(data$Vel_RAFAGAS)) 
    data$Temp_Amb <-as.numeric(as.character(data$Temp_Amb)) 

    data$HR <-as.numeric(as.character(data$HR)) 
    data$Temp_Agua <-as.numeric(as.character(data$Temp_Agua)) 
    data$Presion <-as.numeric(as.character(data$Presion)) 

    data$Radiacion <-as.numeric(as.character(data$Radiacion)) 
    data$Dir_VIENTO <-as.numeric(as.character(data$Dir_VIENTO)) 

データは以下のようになります。

 REGISTRO    FECHA Vel_VIENTO Vel_RAFAGAS Temp_Amb HR Temp_Agua 
    2  1 2015-01-08 15:03:00  6.30  7.55 20.579 58.5 23.472 
    3  2 2015-01-08 15:18:00  6.55  9.07 20.412 57.5 22.609 
    4  3 2015-01-08 15:33:00  6.80  8.56 21.413 54.7 23.761 
    5  4 2015-01-08 15:48:00  6.30  8.31 20.222 59.5 22.705 
    6  5 2015-01-08 16:03:00  6.55  8.31 20.246 58.6 22.298 
    7  6 2015-01-08 16:18:00  7.30  9.57 19.008 63.5 21.366 
     Presion Radiacion Dir_VIENTO 
    2 906.55  NA   NA 
    3 906.15  NA   NA 
    4 905.95  NA   NA 
    5 906.05  NA  202.2 
    6 906.05  966.9  210.6 
    7 905.75  919.4  227.4 

ので、各列がデータ$ TIMESTAMPのタイムスタンプを持つ一つのパラメータを持っています。データの頻度は、data.frame内の15分ごとから30分ごとまでの範囲です。 data.frameの各パラメータの時間平均を使って同じテーブルを取得したいと思います。

答えて

0

まず、コードスニペットを(将来的に)含めることができれば、再現可能なソリューションを提供することができます。

library(stringr) 
library(dplyr) 
FECHA <- c("2015-01-08 15:03:00", "2015-01-08 15:18:00","2015-01-08 15:33:00","2015-01-08 15:48:00","2015-01-08 16:03:00","2015-01-08 16:18:00") 
Temp_Aqua <- c("23.472","22.609", "23.761","22.705", "22.298", "21.366") 
date_time <- matrix(unlist(str_split(FECHA, " ")), ncol = 2, byrow = T) 
x <- as.data.frame(cbind(date_time, Temp_Aqua), stringsAsFactors = F) 
names(x) <- c("date", "time", "temp_aqua") 
x$temp_aqua <- as.numeric(x$temp_aqua) 
x$hour <- str_extract(x$time, "^[0-9]{2}") 
x %>% group_by(date, hour) %>% summarise(hourly_temp_aqua = mean(temp_aqua)) 

Source: local data frame [2 x 3] 
Groups: date [?] 

     date hour hourly_temp_aqua 
     <chr> <chr>   <dbl> 
1 2015-01-08 15   23.13675 
2 2015-01-08 16   21.83200 
:私はdplyrパッケージを見てすることをお勧め一つの可能​​な解決策として

は、時間ごとの平均値を計算するために、日付、時刻、時間と日付と時間によって、最終的にはグループすべてのために別々の列を持っています あなたはタイムスタンプが正しくフォーマット/保存されており、潜在的に単純平均が適切なソリューションであるかどうかを検討すべきであるあなたのソリューションで

(intervallsが均等に分布していない場合例えば、あなたがそれらに異なる重みを与えることを検討可能性)

・ホープこれは役に立ちます!

0

これは私が似たようなアプリケーションに使っていた機能です。注意すべき主な点は、roundの代わりにtruncを使用していることと、datetimeをdplyrのPOSIXctに変換する必要があり、truncがPOSIXltを返すことです。

library(lubridate) 
library(dplyr) 

hourly_ave <- function(timeseries_data){ 

    # Convert the "FECHA" column into datetime 
    timeseries_data$FECHA <- mdy_hm(timeseries_data$FECHA) 

    # Add an Hourly column (use trunc instead of round) 
    # Remember the "as.POSIXct() since trunc() returns POSIXlt which dplyr does not support 
    timeseries_data$Hourly = trunc(timeseries_data$FECHA, "hours") %>% as.POSIXct() 

    # Then group the data and summarize using dplyr 
    # I did not include all the variables, but you should get the idea 
    data_hr <- timeseries_data %>% 
       group_by(Hourly) %>% 
       summarize(Vel_RAFAGAS = mean(Vel_RAFAGAS), Temp_Am = mean(Temp_Am), HR = mean(HR), Temp_Ag = mean(Temp_Ag)) 

    data_hr 
} 
関連する問題