【发布时间】:2015-02-10 13:04:10
【问题描述】:
在许多情况下,在将数据框按一些变量分组后,我想应用一个函数,该函数使用另一个数据框的数据,该数据框按相同的变量分组。我发现的最佳解决方案是在函数中使用 semi_join,如下所示:
d1 <- data.frame(model = c(1,1,2,2), x = runif(4) )
d2 <- data.frame(model=c(1,1,1,2,2,2), y = runif(6) )
myfun <- function(df1, df2) {
subsetdf2 <- semi_join(df2, df1)
data.frame(z = sum(d1$x) - sum(subsetdf2$y)) # trivial manipulation just to exemplify
}
d1 %>% group_by(model) %>% do(myfun(., d2))
问题在于 semi_join 返回“Joining by...”消息,并且当我使用该函数进行引导时,我收到许多消息会导致控制台崩溃。那么,有什么方法可以减少连接的冗长吗?你知道一种更优雅的方式来做这样的事情吗?
附:几年前我问了一个类似的问题 plyr:subset inside a function by the variables specified in ddply
【问题讨论】:
-
在您的示例中,d2 未按任何变量分组。
-
我认为它是在函数内部使用 semi_join 函数隐式分组的
-
如果您想摆脱这些消息,请明确说明您要加入的变量。
-
现在,我正在使用 purrr 包中的 map2 解决此类问题。