【发布时间】: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的任何一个组中,那么它在这里有什么关系呢?这在基础 Rwith(df, ave(t, x, FUN = which.min))中也可以正常工作。顺便说一句, -
@David 我不知道,但据我所知
dplyr无法处理结果向量长度不同的情况。不过我只是猜测。 -
@coffeinjunky 但这两个组都没有发生
which.min(c(NA, NA))的情况-t中没有NAs 根本