【问题标题】:R DF referencing 2 different rows in same column (Returns)R DF 在同一列中引用 2 个不同的行(返回)
【发布时间】:2014-02-15 04:30:32
【问题描述】:

我正在尝试在我的 DF 中创建一个名为“Returns”的新列,但我很难找到如何在同一列但不同的行中划分 2 个变量。

这是 DF:

Date                  Open High  Low AdjClose  
2014-02-13 2014-02-13 1815 1830 1809     1830 
2014-02-12 2014-02-12 1820 1827 1816     1819 
2014-02-11 2014-02-11 1800 1824 1800     1820 
2014-02-10 2014-02-10 1796 1800 1792     1800 
2014-02-07 2014-02-07 1776 1798 1776     1797 
2014-02-06 2014-02-06 1753 1774 1753     1773

我假设代码看起来像这样:

SPXprices.df$Returns <- (SPXprices.df$AdjClose - SPXprices$AdjClose[x,x])/SPXprices$AdjClose[x,x]

我希望有人可以在这里帮助我。

任何见解将不胜感激!

【问题讨论】:

  • 在这种情况下,Returns 列中的值是多少?我不清楚AdjClose 中的哪两个值被用于计算Returns
  • 只是想计算简单的回报@Frank(当天-前一天)/前一天。我想知道引用同一列中过去行的代码。 TY

标签: r dataframe calculated-columns stocks


【解决方案1】:

这是一种参考前一天的方法

returns<-sapply(1:length(SPXprices.df$AdjClose), 
  FUN=function(x) (SPXprices.df$AdjClose[x] - SPXprices.df$AdjClose[x+1])/SPXprices.df$AdjClose[x+1])


SPXprices.df$Returns <- returns

sapply 函数中,我使用SPXprices.df$AdjClose[x+1]) 引用第二天

【讨论】:

  • 谢谢@Frank。快速提问为什么不列出退货?
  • @user3308813 我想我第一次尝试解决方案时,输出是一个列表。所以,我使用了unlist,但这个解决方案没有必要。我会解决的。
【解决方案2】:

这是你要找的吗?

SPXprices.df <- read.table(header=T, text=
"
Date                  Open High  Low AdjClose  
2014-02-13 2014-02-13 1815 1830 1809     1830 
2014-02-12 2014-02-12 1820 1827 1816     1819 
2014-02-11 2014-02-11 1800 1824 1800     1820 
2014-02-10 2014-02-10 1796 1800 1792     1800 
2014-02-07 2014-02-07 1776 1798 1776     1797 
2014-02-06 2014-02-06 1753 1774 1753     1773
")

#sorting the data
SPXprices.df <- SPXprices.df[order(SPXprices.df$Date),]
#using lagpad from http://stackoverflow.com/a/13128713/2862090 to lag
lagpad <- function(x, k) {
  c(rep(NA, k), x)[1 : length(x)] 
}

#showing the result of lagpad
SPXprices.df$lagAdjClose <- lagpad(SPXprices.df$AdjClose,1)

#calculate returns
SPXprices.df$Returns <- (SPXprices.df$AdjClose - lagpad(SPXprices.df$AdjClose,1))/lagpad(SPXprices.df$AdjClose,1)

SPXprices.df
                Date Open High  Low AdjClose lagAdjClose       Returns
2014-02-06 2014-02-06 1753 1774 1753     1773          NA            NA
2014-02-07 2014-02-07 1776 1798 1776     1797        1773  0.0135363790
2014-02-10 2014-02-10 1796 1800 1792     1800        1797  0.0016694491
2014-02-11 2014-02-11 1800 1824 1800     1820        1800  0.0111111111
2014-02-12 2014-02-12 1820 1827 1816     1819        1820 -0.0005494505
2014-02-13 2014-02-13 1815 1830 1809     1830        1819  0.0060472787

【讨论】:

  • 感谢@Rfan,只是想知道引用同一列中前一行的代码是什么,例如假设我想调用昨天的 AdjClose(不使用 ladpad),代码看起来像 $ SPXprices.df$AdjClose[x]?再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
相关资源
最近更新 更多