【问题标题】:How do I lag Quarters in r?我如何在 r 中滞后 Quarters?
【发布时间】:2018-10-02 14:38:15
【问题描述】:

首先 - 感谢您查看我的问题 - 无论您是否回答。

我正在尝试将包含 Quarter 值的滞后值的列添加到我的 DF,但是,当我这样做时,我收到以下警告:

Warning messages:
1: In mutate_impl(.data, dots) :
 Vectorizing 'yearqtr' elements may not preserve their attributes

以下是我的示例数据(我的数据从 2018 年 1 月 3 日开始)

Ticker  Price   Date      Quarter
  A       10    1/3/18    2018 Q1
  A       13.5  2/15/18   2018 Q1
  A       12.9  4/2/18    2018 Q2
  A       11.2  5/3/18    2018 Q2
  B       35.2  1/4/18    2018 Q1
  B       33.1  3/2/18    2018 Q1
  B       31    4/6/18    2018 Q2
 ...      ...   ...        ...
  XYZ     102    5/6/18   2018 Q2

我有一张巨大的桌子,上面有多个股票和多个日期。我计算季度列的方式是:

df$quarter <- lag(as.yearqtr(df$Date))

但是 - 我无法添加会滞后于季度值的列。有人知道可能的解决方法吗?

我想要以下输出:

Ticker  Price   Date      Quarter  Lag_Q
  A       10    1/3/18    2018 Q1   NA
  A       13.5  2/15/18   2018 Q1   NA
  A       12.9  4/2/18    2018 Q2   2018 Q1
  A       11.2  5/3/18    2018 Q2   2018 Q1
  B       35.2  1/4/18    2018 Q1   NA
  B       33.1  3/2/18    2018 Q1   NA
  B       31    4/6/18    2018 Q2   2018 Q1
 ...      ...   ...        ...
  XYZ     102    5/6/18   2018 Q2   2018 Q1

【问题讨论】:

标签: r dplyr zoo


【解决方案1】:

首先,我建议您组织数据,使每一列代表单个证券的价格,每一行代表一个特定日期。从那里,您可以轻松地转换所有证券,但我不确定您的最终目标是什么。 xts 包非常出色,并在c 中进行了优化,是一种证券行业标准。我强烈建议探索它。但这超出了您的帖子的范围!

不过,对于您的数据结构,应该只需要一行:

df$lag_Q <- as.yearqtr( ifelse(test = (df$quarter=="2018 Q1"), 
                                yes = NA, 
                                 no = df$quarter-0.25) )

【讨论】:

  • 非常感谢您。这确实有效。我会确保我阅读了 xts 包。谢谢贾斯汀!
  • 随时!另一个从 SO 帖子中学习的好建议,如果你没有在截止日期之前(这些天谁不是?),我会查找 ifelse、as.yearqtr 和 data.frame 的文档以了解规则更深入的函数和类。一旦你了解了支配它们的约束,前进的道路就会变得更加清晰。祝你好运!
猜你喜欢
  • 2021-11-06
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多