R和dplyr:如何使用前一行和列的值

时间:2017-07-25 16:21:49

标签: r dataframe dplyr

我正在尝试创建一个新变量,它是以前的行和列的函数。我在dplyr中找到了lag()函数,但它无法完成我想要的。

library(dplyr)
x = data.frame(replicate(2, sample(1:3,10,rep=TRUE)))

   X1 X2
1   1  3
2   2  3
3   2  2
4   1  3
5   2  3
6   2  1
7   3  2
8   1  1
9   1  3
10  2  2

x = mutate(x, new_col = # if x2==1, then the value of x1 in the previous row,
                        # if x2!=1, then 0))

我最好的尝试:

foo = function(x){
    if (x==1){
        return(lag(X1))
    }else{
        return(0)
}

x = mutate(x, new_col=foo(X1))

2 个答案:

答案 0 :(得分:3)

我们可以使用ifelse

x %>% 
  mutate(newcol = ifelse(X2==1, lag(X1), 0))

答案 1 :(得分:2)

在基地R中,您可以使用

x$newcol <- (x$X2 == 1) * c(NA, tail(x$X1, -1))

(x$X2 == 1)确保X2的所有元素的0不等于1,并且当X2 == 1时,两个术语的倍数将返回X1的滞后值。