J'ai un fichier csv dans lequel j'ai 2 cours de clôture du stock (sur une base quotidienne)
Dates Bajaj_close Hero_close
3/14/2013 1854.8 1669.1
3/15/2013 1850.3 1684.45
3/18/2013 1812.1 1690.5
3/19/2013 1835.9 1645.6
3/20/2013 1840 1651.15
3/21/2013 1755.3 1623.3
3/22/2013 1820.65 1659.6
3/25/2013 1802.5 1617.7
3/26/2013 1801.25 1571.85
3/28/2013 1799.55 1542
Je veux convertir les données ci-dessus en format de série chronologique. (la date de début est 3/14/2013
et la date de fin est 3/13/2015
)
values <- bajaj_hero[, -1] (excluded first column i.e date in real dataset)
bajaj_hero_timeseries <- ts(values,start=c(2013,1),end=c(2015,3),frequency=365)
La sortie est:
Bajaj_close Hero_close
2013.000 1854.80 1669.10
2013.003 1850.30 1684.45
2013.005 1812.10 1690.50
2013.008 1835.90 1645.60
2013.011 1840.00 1651.15
2013.014 1755.30 1623.30
2013.016 1820.65 1659.60
2013.019 1802.50 1617.70
2013.022 1801.25 1571.85
s'il vous plaît aider .. :)
R a plusieurs façons de représenter des séries chronologiques. Étant donné que vous travaillez avec les cours quotidiens des actions, vous voudrez peut-être considérer que les marchés financiers sont fermés les week-ends et les jours fériés, de sorte que les jours de négociation et les jours civils ne sont pas identiques. Cependant, vous devrez peut-être utiliser vos séries chronologiques en termes de jours de négociation et de jours calendaires. Par exemple, les rendements quotidiens sont calculés à partir des cours de clôture quotidiens séquentiels, qu'un week-end intervienne ou non. Cependant, vous pouvez également créer des rapports basés sur un calendrier, tels que des récapitulatifs de prix hebdomadaires. Pour ces raisons, le paquet xts, une extension de Zoo, est couramment utilisé avec des données financières en R. Un exemple de la façon dont il pourrait être utilisé avec vos données est présenté ci-après.
En supposant que les données montrées dans votre exemple se trouvent dans le dataframe df
library(xts)
stocks <- xts(df[,-1], order.by=as.Date(df[,1], "%m/%d/%Y"))
#
# daily returns
#
returns <- diff(stocks, arithmetic=FALSE ) - 1
#
# weekly open, high, low, close reports
#
to.weekly(stocks$Hero_close, name="Hero")
ce qui donne la sortie
Hero.Open Hero.High Hero.Low Hero.Close
2013-03-15 1669.1 1684.45 1669.1 1684.45
2013-03-22 1690.5 1690.50 1623.3 1659.60
2013-03-28 1617.7 1617.70 1542.0 1542.00
Contribution. Nous allons commencer par le texte de l'entrée indiqué dans la question, car celle-ci ne fournissait pas l'entrée csv:
Lines <- "Dates Bajaj_close Hero_close
3/14/2013 1854.8 1669.1
3/15/2013 1850.3 1684.45
3/18/2013 1812.1 1690.5
3/19/2013 1835.9 1645.6
3/20/2013 1840 1651.15
3/21/2013 1755.3 1623.3
3/22/2013 1820.65 1659.6
3/25/2013 1802.5 1617.7
3/26/2013 1801.25 1571.85
3/28/2013 1799.55 1542"
Zoo."ts"
Les séries de classes ne représentent normalement pas les index de date, mais nous pouvons créer une série de zoo (voir Package Zoo ):
library(Zoo)
z <- read.Zoo(text = Lines, header = TRUE, format = "%m/%d/%Y")
Sinon, si vous avez déjà lu ceci dans un cadre de données DF
, il pourrait alors être converti en Zoo, comme indiqué sur la deuxième ligne ci-dessous:
DF <- read.table(text = Lines, header = TRUE)
z <- read.Zoo(DF, format = "%m/%d/%Y")
Dans les deux cas ci-dessus, z
est une série de Zoo avec un index de classe "Date"
. On pourrait aussi créer la série Zoo, zz
, qui utilise 1, 2, 3, ... comme index de temps:
zz <- z
time(zz) <- seq_along(time(zz))
ts. L'un ou l'autre de ceux-ci peut être converti en une série de classes "ts"
:
as.ts(z)
as.ts(zz)
Le premier a un index de temps qui correspond au nombre de jours écoulés depuis l’époque (le 1er janvier 1970) et aura des NA pour les jours manquants et le second aura 1, 2, 3, ... comme index de temps et aucun NA.
Séries mensuelles. Les séries "ts"
sont généralement utilisées pour les séries mensuelles, trimestrielles ou annuelles. Ainsi, si nous agrégions les données en mois, nous pourrions raisonnablement les représenter sous la forme d'une série "ts"
:
z.m <- as.zooreg(aggregate(z, as.yearmon, mean), freq = 12)
as.ts(z.m)
Voir cette question: La conversion de data.frame en xts order.by nécessite un objet temporel approprié , qui suggère de regarder l’argument de order.by,
Les classes actuellement acceptables comprennent: ‘Date’, ‘POSIXct’, ‘timeDate’, ainsi que «yearmon» et «yearqtr» où les valeurs de l’indice demeurent unique.
Et suggère en outre une conversion explicite en utilisant order.by = as.POSIXct,
df$Date <- as.POSIXct(strptime(df$Date,format),tz="UTC")
xts(df[, -1], order.by=as.POSIXct(df$Date))
Où votre format est assigné ailleurs,
format <- "%m/%d/%Y" #see strptime for details