[英]dplyr rowwise with lag variables
我试图按照下面的代码使用另一个相关变量来填充变量中的NA。
test <- tibble(x = c(1,4,3,2,5,6), y = c(2,NA,6,NA,NA,5))
test <- test %>% mutate(chng = x/lag(x,1))
for(i in 1:nrow(test)){
if(is.na(test$y[i])) test$y[i] <- test$y[i - 1] * test$chng[i]
}
我可以在dplyr中执行相同的操作吗? 我已经尝试了逐行,但似乎无法识别滞后函数。
test %>% rowwise() %>% mutate(y = ifelse(is.na(y), lag(y,1) * chng, y))
连续的多个NA也使我无法创建由滞后变量组成的新列。
您可以重复dplyr
操作,直到所有NA
都填满:
while(sum(is.na(test$y)) > 0){
test <- test %>%
mutate(y = ifelse(is.na(y), lag(y,1) * chng, y))
}
# A tibble: 6 x 3
x y chng
<dbl> <dbl> <dbl>
1 1 2 NA
2 4 8 4
3 3 6 0.75
4 2 4 0.667
5 5 10 2.5
6 6 5 1.2
我很确定这不会为您节省任何计算时间。
它不起作用,因为在逐行中您对一行的子集使用了滞后。 在进入行模式之前,创建y.lag的新列将起作用:
test %>% mutate(y.lag = lag(y,1)) %>%
rowwise() %>%
mutate(y = ifelse(is.na(y), y.lag * chng, y)) %>%
select(-y.lag)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.