首页 > 解决方案 > 将值与 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包含YesNo。我正在尝试将 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"
    }

关于如何修复循环使其正常工作的任何想法?

标签: rfor-loop

解决方案


我们可以使用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))

推荐阅读