将值与for循环中的上一行进行比较

时间:2019-06-16 20:34:11

标签: r for-loop

我有以下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"
    }

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

1 个答案:

答案 0 :(得分:1)

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