私は最近私のマスター論文のためにRを使ってコーディングを開始し、まだ学んでいます。apply.monthly関数(xtsとPOSIXctファイル)で動作しません
いくつかの気象データを処理するために、私は関数を作成しようとしました。 元のファイルは、日付と降水量を含むcsvファイルです。 私は日付を抽出し、すべての私の日付でPOSIXct
オブジェクトを作成し、xts
オブジェクトに日付と降水量を加えました。
mesdonnees <- mesdonnees[26000:30000,]
require('xts')
# Extract characters and define as S....
Syear <- substr(mesdonnees$time, 1, 4)
Smonth <- substr(mesdonnees$time, 6,7)
Sday <- substr(mesdonnees$time, 9, 10)
Shour <- substr(mesdonnees$time, 12, 13)
Sminutes <- substr(mesdonnees$time, 15, 16)
#Gather all parts and use "-" as sep
datetext <- paste(Syear, Smonth, Sday, Shour, Sminutes, sep="-")
#define format of each part of the string
formatdate <- as.POSIXct(datetext, format="%Y-%m-%d-%H-%M", tz = "GMT")
xtsdata <- xts(mesdonnees[,2:3], order.by = formatdate, header = TRUE)
それからdifftime
の値を合計し、それが<だときに変数xに格納し= 20分未満、またはX 20を追加しdifftime
である場合、変数Yに残っているdifftimeを格納する機能を書い> 20分
myfun <- function(CHANGE){ # CHANGE = formatdate or xtsdata
x <- as.difftime(0,format = "%M", units = "mins")
y <- as.difftime(0,format = "%M", units = "mins")
for (i in 2:length(CHANGE)) {
if (difftime(CHANGE[i],CHANGE[i-1],units = "mins") <= as.difftime(20,format = "%M",units = "mins")) {
x <- x + difftime(CHANGE[i],CHANGE[i-1],units = "mins")
} else {
x <- x + 20
y <- y + difftime(CHANGE[i],CHANGE[i-1],units = "mins") - 20
}
}
return(list(paste("x = ",x , sep = ""),paste("y = ",y , sep = "")))
}
この関数は、'as.POSIXct'オブジェクト(は、FormatDate)で作業する場合、本当にうまく動作しますが、私は'xts'オブジェクト(xtsdata)でそれを実行しようとすると、動作しません。そうすると、私は次のエラーを受け取ります:do not know how to convert 'x' to class “POSIXlt”
。時差があるとxがPOSIXct
に変更されるのはなぜですか?
私がうまく動作できない次のステップは、 `apply.monthly(xtsdata、myfun)を使ってapply.monthlyをこの関数に使用しています。
現在、apply.monthly(formatdate,myfun)
を使用しようとすると、私は次のエラーを取得:Error in if (difftime(CHANGE[i], CHANGE[i - 1], units = "mins") <= as.difftime(20, : missing value where TRUE/FALSE needed
をしてapply.monthly(xtsdata,myfun)
をしようとしたとき、私は次のエラーを取得:私の機能が正常に動作し、どのように取得する方法についてError in as.POSIXlt.default(x, tz, ...) : do not know how to convert 'x' to class “POSIXlt”
何かアドバイスをapply.monthly
を適用すると大きな助けになります。 ありがとうございました!詳細については
編集:(SID:メテオデータの識別、私はその列を必要としない)、時間=日付、値=降雨私は降雨を推定する必要が
> head(mesdonnees)
sid time value
26000 100 2010-07-14 11:50:00 0
26001 100 2010-07-14 12:10:00 0
26002 100 2010-07-14 12:20:00 0
26003 100 2010-07-14 12:30:00 0
26004 100 2010-07-14 12:41:00 0
26005 100 2010-07-14 12:50:00 0
> head(formatdate)
[1] "2010-07-14 11:50:00 GMT" "2010-07-14 12:10:00 GMT"
[3] "2010-07-14 12:20:00 GMT" "2010-07-14 12:30:00 GMT"
[5] "2010-07-14 12:41:00 GMT" "2010-07-14 12:50:00 GMT"
> head(xtsdata)
time value
2010-07-14 11:50:00 "2010-07-14 11:50:00" " 0.00"
2010-07-14 12:10:00 "2010-07-14 12:10:00" " 0.00"
2010-07-14 12:20:00 "2010-07-14 12:20:00" " 0.00"
2010-07-14 12:30:00 "2010-07-14 12:30:00" " 0.00"
それらのデータ(メドンドーン)から月に1回。最初のデータは正確な時間に「即時沈殿」をもたらし、10分ごとに値を取得する必要があります。しかし、それは事実ではなく、時には後日まで値がありません(欠損値に気づくための行はNA
ではありません)。 この説明がよければ幸いですか?
データがどのように見えるかを知るために 'head(mesdonnees) 'を実行できますか?あなたが解決しようとしている根底にある問題は何ですか? 「気象データを扱う」と書いたとき、どのような扱いをしていますか? – AkselA