r - 通过 dplyr 中的相同组变量过滤两个数据框

标签 r dplyr tidyr

在许多情况下,在按某些变量对数据框进行分组后,我想应用一个函数,该函数使用来自按相同变量分组的另一个数据框的数据。我发现的最佳解决方案是在函数内部使用 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

最佳答案

如果您只想停止 'Joining by:' 语句,您只需要使用 by 指定您要加入的列。争论。

例如:

semi_join(d2, d1, by="model")

编辑 - 作为使用 semi_join 的替代方法您可以使用 base解决方案。如 group_by功能是按组传递数据,您可以使用简单的索引语句进行过滤。这将避免需要额外的参数。 目前这也假设感兴趣的列是第一列。
myfun <- function(df1, df2) {
  subsetdf2 <- df2[df2[,1] %in% unique(df1[,1]),]
  data.frame(z = sum(df1$x) - sum(subsetdf2$y)) # trivial manipulation just to exemplify
}

关于r - 通过 dplyr 中的相同组变量过滤两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28432411/

相关文章:

r - 如何将聚合与列名列表一起使用

r - 将 map 上的点限制为一层

r - tidyr::pivot_longer() 函数不适用于将列从逻辑转换为整数的 tibble

r - 将 FIX 消息格式 ("Tag=Value") 转换为 CSV

r - 使用 "."分隔符 R 将一列拆分为 2 列

r - 如何使用 R 中的 dplyr 将数据框中的行与多列配对?

r - Purrr(或扫帚)用于计算分组数据集的比例测试(多比例测试)

R - 在 x 轴和 y 轴上使用具有不同变量的 corrplot

r - 在 R 中按顺序标记句子?

r - R数据帧中基于静态函数的逻辑函数