R ddply矢量版

时间:2014-01-16 16:53:27

标签: r plyr

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

我想做以下事情:

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

此处所有帧都包含“column1”和“column2”,processingFunction包含N个参数。

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

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

由于

1 个答案:

答案 0 :(得分: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

您希望单独ddply processingFunction分别data.frame data.frame,并将结果合并到ldply( ll, ddply, .(x, y), summarise, z = processingFunction(z) ) 个结果中:

processingFunction

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

您希望同时对data.frames的所有行应用rbind。那么你应该data.framesrbind全部commonCols <- Reduce( "intersect", lapply(ll, colnames) ) oneDf <- do.call( "rbind", lapply( ll, "[", commonCols ) ) ddply( oneDf, .(x,y), summarise, z = processingFunction(z) ) 放在一起。如果由于各个框架没有共同的所有列而无法直接实现,则必须在公共列子集上{{1}}:

{{1}}