Lee88 Lee88 - 3 years ago 68
R Question

R and dplyr : how to use values from a previous row and column

I am trying to create a new variable which is a function of previous rows and columns. I have found the lag() function in dplyr but it can't accomplish exactly what I would like.

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


My best attempt:

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

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

Answer Source

We can use ifelse

x %>% 
  mutate(newcol = ifelse(X2==1, lag(X1), 0))
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download