R:将一列转换为另一列

时间:2016-08-28 16:03:43

标签: r

请帮帮我!我有:

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无法得到答案。

1 个答案:

答案 0 :(得分:0)

如果您的逻辑是1x 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