需要单独计算两个数据集的变化率和净变化率

时间:2013-12-21 22:29:10

标签: r csv

到目前为止我做了什么:

read.csv("filename.csv", header=TRUE)
df$header1
df$header2

现在我要计算变化率:Header1是Dates,Header2是价格 所有值的日期变化率与前一日期相比。

我想生成两个单独的Change of Change列,在另一个文件上执行相同的操作。

一旦两个数据集都有可用的变化率,我会查找每个日期的净变化率。

我现在的位置:

df<-read.csv("audusd.csv", head = TRUE)
df$Date
df$Close

rate<- 100*diff(df$Close/df[-nrow(df),]$Close

执行,然后我得到这个:

> rate<- 100*diff(df$Close/df[-nrow(df),]$Close
+ 
+ 

在控制台中。

感谢所有帮助,请进一步帮助。 :)

另外,我对是否可以将结果存入文件感到困惑?或者我每次都要运行代码吗?

如果我能理解并开始使用它,这肯定会对我的工作有所帮助。

2 个答案:

答案 0 :(得分:3)

您还可以使用diff(...)函数,它可以避免循环遍历行:

rate <- 100*diff(df$price)/df[-nrow(df),]$price

diff(...)计算差异行(n) - 行(n-1)。 df[-nrow(df),]会返回df除最后一行之外的所有行。

以下是工作代码的完整示例。

# all this just to get sample data.
# daily close for AAPL from 2013.01.01 - today
library(tseries)
library(zoo)
ts <- get.hist.quote(instrument="AAPL", 
                     start="2013-01-01", end="2014-01-01", 
                     quote="AdjClose", provider="yahoo", origin="1970-01-01",
                     compression="d", retclass="zoo")
df <- data.frame(ts)
df <- data.frame(date=as.Date(rownames(df)),price=df$AdjClose)
df <- df[!is.na(df$price),]

# calculate daily rate of change...
rate <- 100*diff(df$price)/df[-nrow(df),]$price

plot(df[-nrow(df),]$date,rate,type="l",xlab="2013",ylab="Pct. Change",main="APPL")

答案 1 :(得分:0)

鉴于你在评论中所说的如何在excel中这样做是R等价物。

dataset=(1:10)^3 #Data in your case one of your columns
ratedata=NULL # Something you have to do so R can put data in this object
for(i in 1:(length(dataset)-1)){ratedata[i]=(dataset[i+1]-dataset[i])/dataset[i]*100} # A simple for function doing what you specified. 
ratedata # Returning the rate data so you can look at it

仅供参考:这只适用于您定期的时间。