首页 > 解决方案 > 在计算中使用滞后时的未知或未初始化列

问题描述

我试图在该列的计算中引用同一列中的前一行。然而,这总是会导致“未知或未初始化的列”警告消息和很多 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 列中的先前行。在计算所述列时,如何引用同一列中的先前行?

标签: rif-statementdataframe

解决方案


看起来我们需要递归评估

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

推荐阅读