2016-02-25 66 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")