我正在尝试在数据框中添加一个指标列:
以下是一个例子:
a <- data.frame(col = c(-1,-2, 3, 4, 0))
#function should return a data frame
b <- function(a)
print(b)
(NA, NA, -1, 0, 1)
答案 0 :(得分:2)
以下是使用包含20个条目的数字向量的快速演示:
set.seed(123)
x = rnorm(20)
x_res = c(NA, NA,
sapply(3:20, FUN = function(y)
sign(x[y-1]) * as.numeric(sign(x[y-1]) == sign(x[y-2]))))
DF = data.frame(x, x_res)
DF
x x_res
1 -0.56047565 NA
2 -0.23017749 NA
3 1.55870831 -1
4 0.07050839 0
5 0.12928774 1
6 1.71506499 1
7 0.46091621 1
8 -1.26506123 1
9 -0.68685285 0
10 -0.44566197 -1
11 1.22408180 -1
12 0.35981383 0
13 0.40077145 1
14 0.11068272 1
15 -0.55584113 1
16 1.78691314 0
17 0.49785048 0
18 -1.96661716 1
19 0.70135590 0
20 -0.47279141 0
这是一个包装函数,可能会使它更加通用(假设你的滞后总是2
):
create_lag_column <- function(x){
c(NA, NA,
sapply(3:length(x), FUN =
function(y) sign(x[y-1]) * as.numeric(sign(x[y-1]) == sign(x[y-2])))
)
}