簡體   English   中英

在R中將data.frame轉換為時間序列對象時遇到困難?

[英]Facing difficulty in convert a data.frame to time series object in R?

我是R語言的新手。 我的文本文件每天都用制表符分隔,並帶有銷售數據。 格式將類似於product-id,day0,day1,day2,day3等。 輸入文件的部分如下所示

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

我用下面的代碼讀取文件

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

這樣可以讀取整個文件,並且變量x是數據幀。 我想將data.frame x更改為時間序列對象以進行進一步處理。在固定測試中,Dickey-Fuller測試(ADF)顯示錯誤。 我嘗試了以下代碼

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

預先感謝您的建議

在R中,時間序列通常采用“每個日期一行”的形式,而您的數據則采用“每個日期一列”的形式。 在轉換為ts對象之前,可能需要轉置數據。

首先轉置它:

y= t(pdInfo)

然后將第一行(作為產品ID)放入行標題中

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

這應該工作:

x = ts(y, frequency = 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) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM