簡體   English   中英

dplyr行與滯后變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM