我目前正在处理金融时间序列数据集,并且尝试基于对收益率(RoR)的观察来创建一个名为Direction的新变量。本质上,如果当前RoR高于前几天的RoR,则方向将为“向上”,如果方向较低,则为“向下”。
我敢肯定,我可以将if循环与if循环结合使用来创建变量,但是我对R还是很陌生,我想不出一种方法来编写可导致所需输出的代码。我可以使用以下函数在excel中创建所需的变量:IF(G4> G3,“ Up”,IF(G4 = G3,“ No Change”,“ Down”))),但我不知道如何翻译此功能转换为R代码
我可以使用任何软件包吗?如果没有,什么代码会导致预期的结果?
答案 0 :(得分:2)
您可以将diff
与sign
一起使用,假设df
是您的数据帧,而ROR
是列名。
df$direction <- c(NA, c("Down", "No change", "Up")[sign(diff(df$ROR)) + 2])
使用示例
x <- c(1, 2, 3, 4, 2, 2, 1)
c(NA, c("Down", "No change", "Up")[sign(diff(x)) + 2])
#[1] NA "Up" "Up" "Up" "Down" "No change" "Down"
或者我们可以使用case_when
library(dplyr)
df %>%
mutate(direction = case_when(ROR > lag(ROR) ~ "Up",
ROR < lag(ROR) ~ "Down",
ROR == lag(ROR) ~ "No change",
TRUE ~ NA_character_))