我正在寻找ddply的矢量版本。
我想做以下事情:
vector_ddply(frame1, frame2, ..., frameN, c("column1", "column2"), processingFunction);
此处所有帧都包含“column1”和“column2”,processingFunction
包含N个参数。
请注意,在我的特定情况下,将N个数据帧合并为一个是没有意义的。 结果帧将由N帧中所有键的联合组成。
有没有办法实现这个目标?
由于
答案 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 )
)
您希望单独ddply
processingFunction
分别data.frame
data.frame
,并将结果合并到ldply( ll, ddply, .(x, y), summarise, z = processingFunction(z) )
个结果中:
processingFunction
您希望同时对data.frames
的所有行应用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) )
放在一起。如果由于各个框架没有共同的所有列而无法直接实现,则必须在公共列子集上{{1}}:
{{1}}