我正在寻找ddply的矢量版本 .
我想做以下事情:
vector_ddply(frame1, frame2, ..., frameN, c("column1", "column2"), processingFunction);
这里所有帧都有"column1"和"column2", processingFunction 需要N个参数 .
processingFunction
请注意,在我的特定情况下,将N个数据帧合并为一个是没有意义的 . 得到的帧将由N帧的所有键的联合组成 .
有没有办法实现这个目标?
谢谢
让我们从一些示例数据开始:
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 ) )
您希望单独在每个 data.frame 上 ddply processingFunction ,并将结果合并到一个结果 data.frame :
data.frame
ddply
ldply( ll, ddply, .(x, y), summarise, z = processingFunction(z) )
您想一次在 data.frames 的所有行上应用 processingFunction . 那么你应该只是 rbind 所有 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.解决方案:应用data.frame-wise
您希望单独在每个
data.frame
上ddply
processingFunction
,并将结果合并到一个结果data.frame
:2.解决方案:应用于一个rbinded data.frame
您想一次在
data.frames
的所有行上应用processingFunction
. 那么你应该只是rbind
所有data.frames
一起到一个大的 . 如果这不是直接可能的,因为各个框架没有共同的所有列,您必须在公共列子集上rbind
: