Mam zaimportowane dane csv, które przekształciłem w obiekt xts. Jeśli spróbuję przekonwertować go na obiekt ts (z końcowym celem korzystania z funkcji takich jak acf), otrzymam:
"Błąd rundy (częstotliwość): nienumeryczny argument do funkcji matematycznej"
Kod do konwersji to:
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"])
Czas jest w większości regularny, ale z pewnymi zmianami w 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"
Niektóre dane mają punkty 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
Aktualizacja:
Zmiana na rozdzielczość na sekundę i podzbiór inny niż na nie pomaga:
> 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
>
Ponadto frequency(web02ts)
zwraca NULL
.
2 odpowiedzi
Obiekt xts/zoo musi być regularny, aby mieć częstotliwość inną niż NULL.
Nie pokazujesz, jak zmieniłeś rozdzielczość na sekundę, ale jeśli próbowałeś przez options(digits.secs=0)
, to nie zadziała, ponieważ wpływa tylko na drukowanie. Musisz zrobić coś takiego:
# 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
strptime
tworzy obiekt klasy POSIXlt
. as.ts
nie obsługuje tego i uważa, że jest to lista, stąd skarga na argument nieliczbowy. Zamiast tego przekonwertuj na POSIXct
.
as.POSIXct(strptime(x$Time, "%m/%d/%Y %H:%M:%OS"))
Podobne pytania
Nowe pytania
r
R to darmowy język programowania typu open source i środowisko oprogramowania do obliczeń statystycznych, bioinformatyki, wizualizacji i obliczeń ogólnych. Proszę podać minimalne i powtarzalne przykłady wraz z pożądanymi wynikami. Użyj dput () dla danych i określ wszystkie pakiety inne niż podstawowe za pomocą wywołań biblioteki (). Nie osadzaj obrazów dla danych lub kodu, zamiast tego użyj wciętych bloków kodu. W przypadku pytań związanych ze statystykami należy skorzystać z https://stats.stackexchange.com.