【发布时间】:2021-12-06 11:51:19
【问题描述】:
当两行在另一个变量 (x) 上不同时,我正在尝试创建一个变量,该变量采用变量 (z) 的值。因此,如果 x 的第 1 行和第 2 行不同(从第 2 行开始),我希望 z 取 1 的值,否则取 0。
我根据这个问题 (For Loop that References the Previous Row in R) 尝试了不同的 if 和 if-else 句子,但它没有给我想要的结果。
df <-
data.frame(
x = c(1, 1, 2, 0, 0, 0, 0, 1, 1, 2),
y = c(1, 1, 2, 0, 0, 0, 0, 1, 1, 2),
z = c(0, 1, 2, 0, 0, 0, 0, 1, 1, 2)
)
for (i in 2:length(df)) {
df$z <- ifelse(df$x[i] != df$x[i - 1], 1, 0)
}
for (i in 2:length(df)) {
if (df$x[i] != df$x[i - 1]) {
df$z == 1
} else{
df$z == 0
}
}
我的预期结果是:
df_expected <-
data.frame(
x = c(1, 1, 2, 0, 0, 0, 0, 1, 1, 2),
y = c(1, 1, 2, 0, 0, 0, 0, 1, 1, 2),
z = c(NA, 1, 1, 1, 0, 0, 0, 1, 0, 1)
)
提前非常感谢!
【问题讨论】:
-
为什么
z == 1是您预期的第二个条目?x的第一个和第二个条目都是1? -
我添加了 0,但 NA 也可以工作 - Z==1 的值对于其余分析无关紧要
标签: r dataframe for-loop if-statement