2017-04-04 114 views
3

我正嘗試使用包zoo中的na.locf以及使用dplyr的分組數據。我使用的是關於這個問題的第一個解決方案:當在一個組內,所有的數據是NA發生Using dplyr window-functions to make trailing values (fill in NA values)na.locf使用來自dplyr的group_by

library(dplyr);library(zoo) 
df1 <- data.frame(id=rep(c("A","B"),each=3),problem=c(1,NA,2,NA,NA,NA),ok=c(NA,3,4,5,6,NA)) 
df1 
    id problem ok 
1 A  1 NA 
2 A  NA 3 
3 A  2 4 
4 B  NA 5 
5 B  NA 6 
6 B  NA NA 

的問題。正如您在問題列中看到的,id = B的na.locf數據來自另一個組:id = A的最後一個數據。

df1 %>% group_by(id) %>% na.locf() 

Source: local data frame [6 x 3] 
Groups: id [2] 

    id problem ok 
    <chr> <chr> <chr> 
1  A  1 <NA> 
2  A  1  3 
3  A  2  4 
4  B  2  5 #problem col is wrong 
5  B  2  6 #problem col is wrong 
6  B  2  6 #problem col is wrong 

這是我的預期結果。爲ID = B的數據是獨立的,什麼是在ID = A

 id problem ok 
    <chr> <chr> <chr> 
1  A  1 <NA> 
2  A  1  3 
3  A  2  4 
4  B  NA  5 
5  B  NA  6 
6  B  NA  6 
+0

這看起來像類似於[錯誤這裏desribed(https://github.com東西以下任一組/哈德利/ dplyr /問題/ 1463)。我在[最近的回答](http://stackoverflow.com/a/43100751/496488)中被這個問題困住了(你需要看看答案的以前版本,因爲我後來編輯它來修復)。 – eipi10

+0

是的,這可能是一個錯誤。根據@ Akrun的回答,我很高興有一個解決方法是使用'mutate_all'。 –

回答

6

我們需要內mutate_allna.locf可以直接在數據集中應用使用na.locf。儘管它已經被「身份證」,通過應用上,充分運用數據集分組na.locf不是由行爲

df1 %>% 
    group_by(id) %>% 
    mutate_all(funs(na.locf(., na.rm = FALSE))) 
# id problem ok 
# <fctr> <dbl> <dbl> 
#1  A  1 NA 
#2  A  1  3 
#3  A  2  4 
#4  B  NA  5 
#5  B  NA  6 
#6  B  NA  6 
+0

任何想法爲什麼它不是按行爲應用組? – bjoseph

+0

@bjoseph它按行爲應用組。如果我們看看'問題',它已經是'b''id' – akrun