2017-04-14 3 views
1

Ich bin ein Neuling in R-Sprache. Ich habe eine Textdatei, die nach Tabs mit Verkaufsdaten für jeden Tag getrennt ist. Das Format wird wie Produkt-ID, Tag0, Tag1, Tag2, Tag3 und so weiter sein. Der Teil der Eingabedatei unterSchwierigmachen beim Konvertieren eines data.frame in ein Zeitreihenobjekt in R?

gegebenen
productid 0 1 2 3 4 5 6 
1   53 40 37 45 69 105 62 
4   0 0 2 4 0 8 0 
5   57 133 60 126 90 87 107 
6   108 130 143 92 88 101 66 
10   0 0 2 0 4 0 36 
11   17 22 16 15 45 32 36 

verwendet I nachfolgenden Code zum Lesen einer Datei

pdInfo <- read.csv("products.txt",header = TRUE, sep="\t") 

Dies ermöglicht es, die gesamte Datei und Variable x ist ein Datenrahmen zu lesen. Ich möchte data.frame x in ein Zeitserienobjekt für die weitere Verarbeitung ändern. Bei einem stationären Test, Dickey-Fuller-Test (ADF) zeigt es einen Fehler an. Ich habe versucht, den Code unten

x <- ts(data.matrix(pdInfo),frequency = 1) 
adf <- adf.test(x) 

    error: Error in adf.test(x) : x is not a vector or univariate time series 

Vielen Dank im Voraus für die Vorschläge

Antwort

2

In R, Zeitreihen sind in der Regel in der Form „eine Zeile pro Datum“, wo Ihre Daten in Form ist „eine Spalte pro Datum". Wahrscheinlich müssen Sie die Daten transponieren, bevor Sie sie in ein ts Objekt konvertieren.

Zuerst es transponieren:

y= t(pdInfo) 

Dann die obere Reihe machen (die Produkt-IDs zu sein) in die Reihe Titel

colnames(y) = y[1,] 
y= y[-1,] # to drop the first row 

Dies sollte funktionieren:

x = ts(y, frequency = 1) 
+0

Danke, @lebelinoz. Die Konvertierung in Zeitreihen erfolgte ohne Fehler. Die Ausführung von adf.test (x) zeigt jedoch einen Fehler an, da "x keine Vektor- oder univariate Zeitreihe ist". – Rajan

-1
library(purrr) 
library(dplyr) 
library(tidyr) 
library(tseries) 

# create the data 

df <- structure(list(productid = c(1L, 4L, 5L, 6L, 10L, 11L), 
        X0 = c(53L, 0L, 57L, 108L, 0L, 17L), 
        X1 = c(40L, 0L, 133L, 130L, 0L, 22L), 
        X2 = c(37L, 2L, 60L, 143L, 2L, 16L), 
        X3 = c(45L, 4L, 126L, 92L, 0L, 15L), 
        X4 = c(69L, 0L, 90L, 88L, 4L, 45L), 
        X5 = c(105L, 8L, 87L, 101L, 0L, 32L), 
        X6 = c(62L, 0L, 107L, 66L, 36L, 36L)), 
       .Names = c("productid", "0", "1", "2", "3", "4", "5", "6"), 
       class = "data.frame", row.names = c(NA, -6L)) 

# apply adf.test to each productid and return p.value 

adfTest <- df %>% gather(key = day, value = sales, -productid) %>% 
    arrange(productid, day) %>% 
    group_by(productid) %>% 
    nest() %>% 
    mutate(adf = data %>% map(., ~adf.test(as.ts(.$sales))) 
    ,adf.p.value = adf %>% map_dbl(., "p.value")) %>% 
    select(productid, adf.p.value) 
Verwandte Themen