首页 文章

R ddply矢量版

提问于
浏览
0

我正在寻找ddply的矢量版本 .

我想做以下事情:

vector_ddply(frame1, frame2, ..., frameN, c("column1", "column2"), processingFunction);

这里所有帧都有"column1"和"column2", processingFunction 需要N个参数 .

请注意,在我的特定情况下,将N个数据帧合并为一个是没有意义的 . 得到的帧将由N帧的所有键的联合组成 .

有没有办法实现这个目标?

谢谢

1 回答

  • 1

    让我们从一些示例数据开始:

    ll <- list(
      f1  = data.frame( x = c("a", "b", "a", "b"), y = c(1,1,2,2), z = rnorm(4), p = 1:4 ),
      f2  = data.frame( x = c("a", "b", "a", "b"), y = c(1,1,2,2), z = rnorm(4), q = 1:4 ),
      f3  = data.frame( x = c("a", "b", "a", "b"), y = c(1,1,2,2), z = rnorm(4), r = 1:4 )
    )
    

    1.解决方案:应用data.frame-wise

    您希望单独在每个 data.frameddply processingFunction ,并将结果合并到一个结果 data.frame

    ldply( ll, ddply, .(x, y), summarise, z = processingFunction(z) )
    

    2.解决方案:应用于一个rbinded data.frame

    您想一次在 data.frames 的所有行上应用 processingFunction . 那么你应该只是 rbind 所有 data.frames 一起到一个大的 . 如果这不是直接可能的,因为各个框架没有共同的所有列,您必须在公共列子集上 rbind

    commonCols <- Reduce( "intersect", lapply(ll, colnames) )
    oneDf <- do.call( "rbind", lapply( ll, "[", commonCols ) )
    ddply( oneDf, .(x,y), summarise, z = processingFunction(z) )
    

相关问题