r - 将值与 for 循环中的前一行进行比较
问题描述
我有以下for循环:
dataframe <- for (i in 2:nrow(dataframe) {
if (dataframe$ColA[i] == dataframe$ColA[i-1]) {
dataframe$ColB[i] <- "No"
} else {
dataframe$ColB[i] <- "Yes"
}
}
dataframe$ColB[1] <- "Y"
ColA
包含一个字符串,并且ColB
包含Yes
或No
。我正在尝试将 A 列的值与前一行中 A 列的值进行比较。如果colA[2] == colA[1]
,colB[2]
则应相等"Yes"
,否则colB
应相等No
。
当我运行循环时,它导致数据框为NULL (empty)
.
当我测试单个实例时,比较按预期工作:
if (dataframe$ColA[2] == dataframe$ColA[2-1]) {
dataframe$ColB[2] <- "No"
} else {
dataframe$ColB[2] <- "Yes"
}
关于如何修复循环使其正常工作的任何想法?
解决方案
我们可以使用lag
比较值而不是循环
library(dplyr)
dataframe %>%
mutate(ColB = case_when(ColA == lag(ColA) ~ "No",
TRUE ~ "Yes"))
数据
dataframe <- data.frame(ColA = c(1, 2, 3, 1, 1, 3))
推荐阅读
- robotframework - 如果有定位器,则获取元素的坐标
- django - Django如何在模板中迭代两个子类的查询集?
- python - 在忽略子目录的目录中查找文件-通过python的linux cmd
- visual-studio-code - WebView中的VSCode跨域请求
- python - 如何在python中使用数值条件?
- node.js - 如何在 JSON 中添加变量键?
- javascript - 实现芯片
- datamodel - 将表链接到另一个表
- flutter - 打开/关闭抽屉布局时如何将导航抽屉汉堡菜单图标更改为箭头图标 - Flutter?
- java - 如何使用 Firebase 数据库更新本地对象