2011-07-20 17 views
5

xtsオブジェクトに変換されたインポートされたcsvデータがあります。私は(ACFのような関数を使用しての最終目標で)TSオブジェクトに変換しようとすると私が取得:xtsをtsに変換する:ラウンド(頻度)のエラー

「ラウンド(周波数)でエラーが発生しました:数学 機能に非数値引数」

それを変換するためのコードは次のとおり

library("zoo") 
#Working With Milliseconds 
op <- options(digits.secs=3) 

#Rename Function 
clean_perfmon = function(x, servername) { 
    names(x)[names(x)=="X.PDH.CSV.4.0...Coordinated.Universal.Time..0."] <- "Time" 
    x$Time = strptime(x$Time, "%m/%d/%Y %H:%M:%OS") 
    return(x) 
} 

web02 = read.csv("/home/kbrandt/Desktop/Shared/web02_2011_07_20_1.csv") 
web02 = clean_perfmon(web02, "NY.WEB02") 
web02ts = xts(web02[,-1], web02[,"Time"]) 

時間はほとんど規則的であるが、MSにおいていくつかのバリエーションで:

time(web02ts)[1:3] 
[1] "2011-07-20 11:21:50.459 EDT" "2011-07-20 11:21:51.457 EDT" "2011-07-20 11:21:52.456 EDT" 

データの一部は、NAは指摘している:

> web02ts[1:3,1] 
         X..NY.WEB02.Process.Idle....Processor.Time 
2011-07-20 11:21:50.459           NA 
2011-07-20 11:21:51.457         1134.819 
2011-07-20 11:21:52.456         1374.877 

更新:
第2の解像度ごとに変更し、非NAのサブセットは助けにはならない:

> as.ts(web02ts[2:10,1]) 
Error in round(frequency) : Non-numeric argument to mathematical function 
> web02ts[2:10,1] 
        X..NY.WEB02.Process.Idle....Processor.Time 
2011-07-20 11:21:51         1134.819 
2011-07-20 11:21:52         1374.877 
2011-07-20 11:21:53         1060.842 
2011-07-20 11:21:54         1067.092 
2011-07-20 11:21:55         1195.205 
2011-07-20 11:21:56         1223.328 
2011-07-20 11:21:57         1121.774 
2011-07-20 11:21:58         1187.393 
2011-07-20 11:21:59         1378.001 
> 

また、 frequency(web02ts)NULLを返します。

答えて

1

xts/zooオブジェクトはNULLでない頻度を持つように規則的でなければなりません。

どのように秒単位の解像度に変更したかはわかりませんが、options(digits.secs=0)で試した場合、印刷にのみ影響するため動作しません。次のようなことをする必要があります:

# example data 
set.seed(21) 
web02ts <- xts(rnorm(10), Sys.time()+1:10+runif(10)/3) 

web02ts_reg <- align.time(web02ts,1) 
frequency(web02ts_reg) 
# [1] 1 
as.ts(web02ts_reg) 
# Time Series: 
# Start = 1 
# End = 10 
# Frequency = 1 
# [1] 0.793013171 0.522251264 1.746222241 -1.271336123 2.197389533 
# [6] 0.433130777 -1.570199630 -0.934905667 0.063493345 -0.002393336 
3

strptimeは、クラスPOSIXltのオブジェクトを作成します。 as.tsはそれをサポートしておらず、それがリストであると考えます。したがって、非数値引数についての苦情です。代わりにPOSIXctに変換してください。

as.POSIXct(strptime(x$Time, "%m/%d/%Y %H:%M:%OS")) 
関連する問題