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