我正在尝试创建一个新变量,它是以前的行和列的函数。我在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))
答案 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的滞后值。