在ifelse()中将当前值与R中的先前值进行比较

时间:2018-07-30 20:03:18

标签: r if-statement

我正在一个项目中,如果我想将当前值与上一个值进行比较,如果为true,则返回输出1,如果为false,则返回输出0。

我尝试了

brv_trx1$'first' <- ifelse(brv_trx1$`Total TRx` != lag(brv_trx1$`Total TRx`),1,0)

此代码无法正常工作。

x= c(1,2,2,2,3,4,5,5,5,5,6,7)

我想要类似以下的输出:

x  y
1  1
2  1
2  0
2  0 
3  1
4  1 
5  1
5  0
5  0

此步骤完成后,我就有一个十分位函数

brv_trx1$decvar <- ifelse(brv_trx1$cum != 0 & brv_trx1$first == 1, (11 - ceiling(round((brv_trx1$cum/total) * 10, 4))), 
                     ifelse(brv_trx1$cum != 0 & brv_trx1$first == 0 , lag(brv_trx1$decvar), 0))

对于此功能,我得到了很多NA。

预期输出为:

Y 12月
1 10
1 10
1 9
0 9
0 9
1 8
0 8
1 8
1 8

3 个答案:

答案 0 :(得分:0)

您可以使用索引。在这里,我制作了1-9和2-10的向量。然后,通过使用“ shifted 1”索引比较原始向量的元素(1等于2,2等于3,依此类推)。

.ui-accordion-content-wrapper-overflown {
    overflow: hidden;
}

答案 1 :(得分:0)

由于lag()将为第一个条目生成NA,请考虑以下因素:

x= c(1,2,2,2,3,4,5,5,5,5,6,7)
x <- as.data.frame(x=x)

x$y <- ifelse( (x$x==lag(x$x)) %in% c(NA, FALSE), 1, 0) 

如果x == lag(x)的比较结果为FALSE或NA(因为这是对滞后的第一次比较),则标记1,否则按照上面的示例标记0。

答案 2 :(得分:0)

使用data must have same number of columns to bind by row

diff