date A B C
11/24/2016 0 -1 -1
11/23/2016 -1 -1 -1
11/22/2016 0 -1 -1
11/21/2016 0 -1 -1
11/18/2016 -1 -1 -1
11/17/2016 -1 -1 -1
11/16/2016 -1 -1 -1
11/15/2016 -1 -1 -1
11/14/2016 -1 -1 -1
11/11/2016 -1 -1 -1
11/10/2016 0 -1 0
11/9/2016 0 -1 0
C
的excel命令(假设数据从第2行开始)为=IF(A2=-1, -1, IF(AND(B2=-1,C3=-1),-1,0))
。所以基本上,如果列A是-1,那么列C也将是-1。否则,我们将检查是否B2=-1
以及C下面的行是否为-1
。在Excel中,我可以通过简单地复制/粘贴公式来完成此操作,并且C列会自动更新。我不认为这是相当的R.R - 从Excel复制IF()逻辑命令到R
在R作为简单的,我有一个山坳A
和B
价值观,我想用这些列创建C
像我如何通过Excel中一样。然而,我一直在想如何做到这一点已经有一段时间了。这是因为'C'依赖于'A',如果失败则取决于'B'和它自身的滞后值。帮助将非常感谢!
编辑:我有一些想法,可能工作。
for (i in 1:length(dat[,1])){
dat[i,3] <- ifelse(dat[i,1]==-1, -1, 0)
}
运行第一循环之后,我得到:
A B V3
1 0 -1 0
2 -1 -1 -1
3 0 -1 0
4 0 -1 0
5 -1 -1 -1
6 -1 -1 -1
7 -1 -1 -1
8 -1 -1 -1
9 -1 -1 -1
10 -1 -1 -1
11 0 -1 0
12 0 -1 0
现在的第二个条件:
for (i in 2:length(dat[,1])){
dat[i-1,3] <- ifelse(dat[i-1,2]==-1&dat[i,3]==-1, -1, dat[i,3])
}
对于第二个条件,我希望的是,for()
将检查在它之前的行并且迭代地填充-1
s,只要在C中的当前行之前存在-1
行,并且-1
一个当前行中B.然而,在这结束返回:
A B V3
1 0 -1 -1
2 -1 -1 0
3 0 -1 0
4 0 -1 -1
5 -1 -1 -1
6 -1 -1 -1
7 -1 -1 -1
8 -1 -1 -1
9 -1 -1 -1
10 -1 -1 0
11 0 -1 0
12 0 -1 0
我需要row2
留为-1,这样row3
可以得到填补为-1。
所以你已经有'C'列的值了吗? –
@Ronak Shah对不起!应该澄清。我在R中有'A'和'B'的值,我想用这些来创建'C',就像我在Excel中做的一样。将编辑我的文章! – Nikitau
'dplyr :: case_when'可以很好地处理:'library(dplyr); df%>%mutate(C = case_when(A == -1〜-1,B == -1&lead(C)== -1〜-1,TRUE〜0))'否则可以使用嵌套'ifelse '电话,但那会变得混乱。 – alistaire