R-将IF()逻辑命令从Excel复制到R

R-将IF()逻辑命令从Excel复制到R,r,R,excel命令假定C的数据从第2行开始,即=IFA2=-1,-1,IFANDB2=-1,C3=-1,-1,0。所以本质上,如果列A是-1,那么列C也将是-1。否则,我们将检查B2是否为-1,以及C中我们下面的行是否为-1。在Excel中,我只需复制/粘贴公式就可以做到这一点,C列将自动更新。我不认为这在R中很简单 在R中,我有A列和B列的值,我想用这些列创建C,就像我通过Excel所做的那样。然而,我一直在思考如何做到这一点已经有相当一段时间了。这是因为“C”依赖于“A”,如果失败,则依赖于“B

excel命令假定C的数据从第2行开始,即=IFA2=-1,-1,IFANDB2=-1,C3=-1,-1,0。所以本质上,如果列A是-1,那么列C也将是-1。否则,我们将检查B2是否为-1,以及C中我们下面的行是否为-1。在Excel中,我只需复制/粘贴公式就可以做到这一点,C列将自动更新。我不认为这在R中很简单

在R中,我有A列和B列的值,我想用这些列创建C,就像我通过Excel所做的那样。然而,我一直在思考如何做到这一点已经有相当一段时间了。这是因为“C”依赖于“A”,如果失败,则依赖于“B”及其自身的滞后值。非常感谢您的帮助

编辑:我有一个想法可能会奏效

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
现在是第二个条件:

  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

我需要第2行保持为-1,以便第3行可以作为-1填充

您可以在R中使用“ifelse”函数:

    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

这应该可以做到。

问题是,因为您是从以下计算值中提取的,所以需要从底部开始计算,因为那里的值可能会一直层叠到顶部。Reduce with right=TRUE和accumulate=TRUE可以创建逻辑:

df$C日期A B C > 1 11/24/2016 0 -1 -1 > 2 11/23/2016 -1 -1 -1 > 3 11/22/2016 0 -1 -1 > 4 11/21/2016 0 -1 -1 > 5 11/18/2016 -1 -1 -1 > 6 11/17/2016 -1 -1 -1 > 7 11/16/2016 -1 -1 -1 > 8 11/15/2016 -1 -1 -1 > 9 11/14/2016 -1 -1 -1 > 10 11/11/2016 -1 -1 -1 > 11 11/10/2016 0 -1 0 > 12 11/9/2016 0 -1 0 因为它必须对每一行运行一次迭代,所以速度不会太快,但对于1k行来说可以


这句话的逻辑是可疑的,你应该在上下文中仔细考虑你的计算是否有意义。< /P>所以你已经有了C列的值了吗?“Ronak Shah Sorry!应该澄清一下。我在R中有A和B的值,我想用它们来创建C,就像我在Excel中所做的那样。将编辑我的帖子!dplyr::case_当处理这个问题时,字面意思是:librarydplyr;df%>%mutateC=case\u whenA==-1~-1,B==-1&leadC=-1~-1,TRUE~0否则您可以使用嵌套的ifelse调用,但这会变得很混乱。@alistaire谢谢,如果还没有生成C,这会起作用吗?啊,不会。所以您在第二行中使用了来自第一个条件的值?你不能直接检查A3=-1的时间吗?在这种情况下,第三行不是0吗?你需要从下一行得到C的值。嗨,我想它可能是超前或滞后C?另外,我遇到的问题是C实际上没有在R中生成。在Excel中,我能够复制/粘贴公式,并让C列自动更新自己。我不太确定这在R中会起什么作用。@alistaire-Yup。更复杂的是,我必须以某种方式在R中生成C。谢谢!我不知道Reduce可以做到这一点。我在为我的原始数据重写它时有点困难,这是一个data.frames列表。如果我的原始示例数据是我的许多data.frames中的一个,df[[1]]返回所有列,df[[1]][,3]检索列C,我将如何实现上述代码?您可以在Lappy内部的列表中映射整个内容,或者如果data.frames都相似,将它们绑定到一个带有ID列的big data.frame中,这些元素来自dplyr::bind_rows及其.ID参数集,这样做很容易,并按组应用。您还可以查看purrr,它有许多用于处理列表的实用程序。

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])

       }
    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
x<-data.set.name
y<-ifelse(x$A==-1,-1,ifelse(x$B==-1 & X$C==-1,-1,0))