请帮帮我!我有:
x y
0 0
0 0
1 0
0 0
0 0
1 0
0 0
0 0
-1 0
0 0
我需要:
x y
0 0
0 0
1 1
0 1
0 1
1 1
0 1
0 1
-1 0
0 0
列x中有1个填充y,1个向前,直到列x中的-1为0,填充y为0。
是否可以在不使用循环语句的情况下执行此操作?
它不是" R:对自身的列引用"。 使用cumsum无法得到答案。
答案 0 :(得分:0)
如果您的逻辑是1
列x
y
填充1
且-1
前进,直到x
列{{}} 1}}从y
填充0
,反之亦然:
由于您尝试使用以前的值fill forward
向量,您可能希望使用na.locf
包中的zoo
(最后一次观察结果)函数并在填充前设置阈值,这是第一行:在1
时将值设置为x == 1
,在0
时将值设置为x == -1
,并为{NA
将其设置为na.locf
1}}正常工作。第一个元素将是输出的异常,如果不存在1和-1,您似乎希望默认值为零,这就是第二行在此处执行的操作。在y
列中设置阈值后,使用na.locf
直接填写该阈值:
df$y <- with(df, ifelse(x == 1, 1, ifelse(x == -1, 0, NA)))
df$y[1] <- if(df$x[1] != 1) 0 else df$y[1]
df$y <- zoo::na.locf(df$y)
df
# x y
# 1 0 0
# 2 0 0
# 3 1 1
# 4 0 1
# 5 0 1
# 6 1 1
# 7 0 1
# 8 0 1
# 9 -1 0
# 10 0 0