r - 在计算中使用滞后时的未知或未初始化列
问题描述
我试图在该列的计算中引用同一列中的前一行。然而,这总是会导致“未知或未初始化的列”警告消息和很多 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 列中的先前行。在计算所述列时,如何引用同一列中的先前行?
解决方案
看起来我们需要递归评估
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
推荐阅读
- javascript - 如何以 .ci tempate 形式运行 JS 脚本?
- c# - 以非常具体的方式在c#中拆分字符串输入的问题
- arrays - 如何在 Google Apps Script 中将大量二维数组(超过 200k 数组)转换为一维数组?
- javascript - 从 JAVA 到 javascript 的 AES 加密
- android - 如何删除 Facebook Audience Network 的展示位置广告 ID?
- mingw - Windows 的 Code::Blocks/wxWidgets 交叉编译失败
- npm - npm run build 不起作用 - gulp-sourcemaps 错误
- javascript - React Native - 如何在不刷新应用程序的情况下实时收听 AsyncStorage 更改(条件屏幕渲染)?
- javascript - Chrome android 自动清除会话(身份验证)cookie 关闭
- r - 如何从具有多列的表在 R 中创建分组条形图