Смещение столбца вниз во временном ряду в R - PullRequest
1 голос
/ 05 августа 2020

У меня есть следующий код для загрузки данных из Yahoo Finance

#Libraries
library(quantmod);
library(forecast);
library(tseries);
library(timeSeries);
library(xts);

#Variable plug-ins
stockname = "NFLX"
startdate = "2010-01-01"
enddate = "2020-07-30"

#Pull data from Yahoo Finance
stockvar = getSymbols(c(stockname),src="yahoo", from=startdate, to=enddate,auto.assign = FALSE)
stockvar = na.omit(stockvar)

#Chart time series
chartSeries(stockvar, theme="white", name=c(stockname)[1])

И я хочу вытащить ряд цен закрытия в столбце 4 набора данных Yahoo Finance в новый набор данных под названием price и переместить столбец на один день меньше. Например от этого:

            stockname.Close
2010-01-04  7.640000
2010-01-05  7.358572
2010-01-06  7.617143

до этого

            stockname.Close
2010-01-05  7.640000
2010-01-06  7.358572
2010-01-07  7.617143

Ответы [ 3 ]

0 голосов
/ 05 августа 2020

Чтобы выбрать только закрытый столбец, вы можете:

stockvar[,  'NFLX.Close']

#           NFLX.Close
#2010-01-04   7.640000
#2010-01-05   7.358572
#2010-01-06   7.617143
#2010-01-07   7.485714
#2010-01-08   7.614286
#2010-01-11   7.604286
#....

Чтобы сдвинуть столбец «вниз», вы можете использовать lag

stats::lag(stockvar[,  'NFLX.Close'])

#           NFLX.Close
#2010-01-04         NA
#2010-01-05   7.640000
#2010-01-06   7.358572
#2010-01-07   7.617143
#2010-01-08   7.485714
#2010-01-11   7.614286
#....
0 голосов
/ 06 августа 2020

Я также нашел другой способ сделать это сам, используя следующий код:

#Pull Close price series at column 4 of the Yahoo Finance dataset
price = stockvar[,4]

, чтобы переименовать столбец в Lclose, сдвинуть цену на 1 строку вниз и удалить первую пустую строку:

names(price)[1] <- "Lclose"
price$Lclose[2:nrow(price)] <- price$Lclose[1:(nrow(price) - 1)]
price = price[-1,]
0 голосов
/ 05 августа 2020

Попробуйте следующее:

library(tibble)
library(dplyr)
library(lubridate)

x <- "            stockname.Close
2010-01-04  7.640000
2010-01-05  7.358572
2010-01-06  7.617143"

df <- read.table(text = x, header = TRUE) %>%
  rownames_to_column(var = "date") %>%
  mutate(date = as_date(date)) %>%
  mutate(date = date + days(1))

В приведенном выше коде R я сначала прочитал ваши данные. Затем создайте столбец даты и, наконец, добавьте день к дате. Результат:

        date stockname.Close
1 2010-01-05        7.640000
2 2010-01-06        7.358572
3 2010-01-07        7.617143

, что вы и хотели.

...