我有以下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"
}
关于如何修复循环以使其正常工作的任何想法吗?
答案 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))