2016-02-25 64 views
4

請參閱下面可重複的示例。第一個示例返回OUT變量的不正確矢量(組2的OUT值應爲10)。Dplyr突變與group_by給我不正確的值(BUG?)

library(dplyr) 
x <- c(1, 1,2,2) 
v <- c(NA,NA,10,20) 
t <- c(1,2,1,2) 
df = data.frame(x,v,t) 
df = df %>% group_by(x) %>% mutate(out=v[which.min(t)]) 
df$out 

下面的示例僅更改組1的一個值,但這會導致該命令返回組2(另一組)的正確答案。

v <- c(1,NA,10,20) 
df = data.frame(x,v,t) 
df = df %>% group_by(x) %>% mutate(out=v[which.min(t)]) 
df$out 

我錯過了什麼,或者這是一個計算錯誤?

+0

看起來的確是一個錯誤。我得到正確的結果使用庫(data.table); setDT(df)[,out:= v [which.min(t)],by = x]'。嘗試使用最新版本的'dplyr'(GH上的開發版本),如果它仍然無法正常工作,則報告爲GH的錯誤。 –

+1

對於第一組,我們有'which.min(c(NA,NA))',它返回'integer(0)'。我想這是問題的來源。 – coffeinjunky

+0

@coffeinjunky在'x'組中都沒有'''在't'中,所以它在這裏如何相關?這也適用於基準R'(df,ave(t,x,FUN = which.min))'。 Btw, –

回答

0

這已在當前開發版本dplyr_0.4.3.9001中得到解決。

爲了解決你所要做的問題如下(從issue #1904在GitHub上):

# 1. Install current dev. version of 'devtools' 

     devtools::install_github("hadley/devtools") 

# 2. Restart R session - IMPORTANT! 

# 3. After restart install dev. version of both 'lazyeval' and 'dplyr' 

     devtools::install_github("hadley/lazyeval") 
     devtools::install_github("hadley/dplyr")