2011-07-20 37 views
5

Tôi có một số dữ liệu csv đã nhập mà tôi đã chuyển thành đối tượng xts. Nếu tôi cố gắng để chuyển đổi nó thành một đối tượng ts (với mục tiêu cuối cùng của việc sử dụng các chức năng như ACF) tôi nhận được:Chuyển đổi xts sang ts: Lỗi trong Vòng (tần số)

"Lỗi trong vòng (tần số): đối số không số để toán học chức năng"

mã để chuyển đổi nó là:

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"]) 

Hiện là chủ yếu thường xuyên, nhưng với một số thay đổi trong 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" 

Một số dữ liệu có NA chỉ:

> 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 

Cập nhật:
Thay đổi để mỗi độ phân giải thứ hai, và một tập hợp con non-na không giúp:

> 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 
> 

Ngoài ra, frequency(web02ts) trả về NULL.

Trả lời

1

Đối tượng xts/zoo phải thường xuyên có tần số không NULL.

Bạn không hiển thị cách bạn thay đổi thành độ phân giải mỗi giây nhưng nếu bạn đã thử qua options(digits.secs=0), điều này sẽ không hoạt động vì nó chỉ ảnh hưởng đến in. Bạn cần thực hiện một việc như sau:

# 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 tạo đối tượng của lớp POSIXlt. as.ts không hỗ trợ nó, và nghĩ rằng đó là một danh sách, do đó khiếu nại về một đối số phi số. Chuyển đổi sang POSIXct để thay thế.

as.POSIXct(strptime(x$Time, "%m/%d/%Y %H:%M:%OS")) 
Các vấn đề liên quan