在计算中使用滞后时未知或未初始化的列

时间:2018-05-27 19:51:10

标签: r if-statement dataframe

我试图在所述列的计算中引用同一列中的前一行。然而,这总是导致“未知或未初始化的列”警告消息和许多NA。

MovementData <- c(-1, -2, -1, 1, 2, 4) 
Database <- data.frame(MovementData) 

Database$Score <- ifelse(Database$MovementData <= 0 , 0,
                                    ifelse(lag(Database$Score,1) == 0,1,2))

期望的输出:

Database$Score <- c(0,0,0,1,2,2)

我的计算意图如下: 如果MovementData为负数,则分数为0.如果MovementData为正且前一分数为0,则分数为1.如果MovementData为正且前一分数不为0,则分数为2.

这给了我前面提到的错误。 我正在寻找一种方法来使用滞后(或其他函数),它可以引用列本身计算中Database $ Score列中的前一行。 在计算所述列时,如何引用同一列中的前一行?

1 个答案:

答案 0 :(得分:2)

看起来我们需要一个递归评估

Database$Score[1] <- 0

for(i in 2:nrow(Database)) {
      Database$Score[i] <- if(Database$MovementData[i] <= 0) {
                           0 } else if(Database$MovementData[i] > 0 &
                                    Database$Score[i-1] == 0) {
                              1 } else 2}

Database$Score
#[1] 0 0 0 1 2 2