在R中的时间序列中向下移动列

在R中的时间序列中向下移动列,r,finance,yahoo-finance,quantitative-finance,R,Finance,Yahoo Finance,Quantitative Finance,我有以下代码从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

我有以下代码从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])
我想把Yahoo Finance数据集第4列的收盘价序列拉到一个名为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
试试这个:

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))
这正是你想要的。

试试这个:

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))

这是您想要的。

要仅选择关闭列,您可以执行以下操作:

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
#....

要仅选择关闭列,可以执行以下操作:

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
#....

我还通过以下代码找到了另一种方法:

#Pull Close price series at column 4 of the Yahoo Finance dataset
price = stockvar[,4]
要将该列重命名为Lclose,请向下移动price 1行并删除第一个空行:

names(price)[1] <- "Lclose"
price$Lclose[2:nrow(price)] <- price$Lclose[1:(nrow(price) - 1)]
price = price[-1,]

names(price)[1]我还找到了另一种方法,使用以下代码自己完成:

#Pull Close price series at column 4 of the Yahoo Finance dataset
price = stockvar[,4]
要将该列重命名为Lclose,请向下移动price 1行并删除第一个空行:

names(price)[1] <- "Lclose"
price$Lclose[2:nrow(price)] <- price$Lclose[1:(nrow(price) - 1)]
price = price[-1,]


name(price)[1]请添加您的代码使用的包,以便其他人可以运行您的代码。我刚刚添加了它们。请添加您的代码使用的包,以便其他人可以运行您的代码。我刚刚添加了它们。非常感谢您的回答,我现在就试试。它正是我想要的工作方式,我现在唯一的问题是如何更改它,以便它对从yahoo finance下载的stockvar数据集中的所有收盘价(第4列)值进行更改。假设您的数据框架正常,例如日期列的日期格式正确,您应该能够使用最后一个
mutate()
要对您的完整数据集执行我在示例中所做的操作。我的日期列是有序的,但我不明白最后一个
mutate()
是什么意思,您的意思是我需要更改示例mutate(date=date+days(1))这一行中的某些内容吗,如果是这样的话是什么意思。无论我是否更改stockname、startdate和enddate变量,它都会工作吗?谢谢你的关注,你不需要太多改变。您是否尝试过:
df非常感谢您的回答,我现在就尝试。它正是我想要的。我现在唯一的问题是如何更改它,以便对从yahoo finance下载的stockvar数据集中的所有收盘价(第4列)值执行此操作。假设您的数据框正常,例如,日期列的日期格式正确,您应该能够使用最后一个
mutate()
来完成我在示例中对您的完整数据集所做的操作。我的日期列是有序的,但我不理解您所说的最后一个
mutate()
,您的意思是我需要更改示例mutate(date=date+days(1))这一行中的某些内容,如果是这样的话是什么。无论我是否更改stockname、startdate和enddate变量,它都会工作吗?谢谢你的关注,你不需要太多改变。您是否尝试过:
df非常感谢您的回答。您已经查看了您的答案,但是出现了一个窗口,窗口说因为我的声誉不足15个,我的选票将被计算,但不会公开显示。@DavidMuñoz是的,您不能向上投票,但您可以通过单击投票按钮下方左侧的灰色复选标记来接受答案。非常感谢您的回答。您的答案已被选中,但出现了一个窗口,窗口中说,由于我的声誉不足15,我的投票将被计算,但不会公开显示。@DavidMuñoz是的,您不能向上投票,但您可以通过单击投票按钮下方左侧的灰色复选标记来接受答案。