2011-07-20 18 views
5

我有一些導入的csv數據,我已經變成了一個xts對象。如果我嘗試將其轉換成TS對象(用像ACF功能的最終目標)我得到:轉換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 

更新:
更改爲每秒的分辨率,以及非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"))