【问题标题】:Dplyr mutate with group_by gives me incorrect values (BUG?)Dplyr mutate with group_by 给了我不正确的值(BUG?)
【发布时间】:2016-02-25 16:13:59
【问题描述】:

请参阅下面的可重现示例。第一个示例返回的 OUT 变量向量不正确(组 2 的 OUT 值应为 10)。

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

是我遗漏了什么还是计算错误?

【问题讨论】:

  • 看起来确实是个错误。我使用library(data.table) ; setDT(df)[, out := v[which.min(t)], by = x] 得到了正确的结果。在最新版本的dplyr(GH 上的开发版本)上尝试此操作,如果仍然无法正常工作,请报告为 GH 上的错误。
  • 对于第一组,我们有which.min(c(NA, NA)),它返回integer(0)。我想这就是问题所在。
  • @coffeinjunky 在t 中没有NAs 在x 的任何一个组中,那么它在这里有什么关系呢?这在基础 R with(df, ave(t, x, FUN = which.min)) 中也可以正常工作。顺便说一句,
  • @David 我不知道,但据我所知dplyr 无法处理结果向量长度不同的情况。不过我只是猜测。
  • @coffeinjunky 但这两个组都没有发生which.min(c(NA, NA)) 的情况-t 中没有NAs 根本

标签: r dplyr


【解决方案1】:

这已在当前开发版本dplyr_0.4.3.9001中解决。

要解决问题,您必须执行以下操作(来自 GitHub 上的 issue #1904):

# 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")

【讨论】:

  • 您觉得这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2021-02-14
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多