从数据帧列表中的lapply向量赋值

时间:2012-12-10 17:14:03

标签: r

我有一个包含27个数据帧的列表,每个帧中的行数不同,但列数相同(22)。我需要将每列的最小值,最大值和中值放入每个帧的向量中,结果应如下所示:

frame1 =(c1min,c1max,c1median,c2min,c2max,c2median ... c22min,c22max,c22median)

frame2 =(c1min,c1max,c1median,c2min,c2max,c2median ... c22min,c22max,c22median)

...

frame27 =(c1min,c1max,c1median,c2min,c2max,c2median ... c22min,c22max,c22median)

我已经生成了每列的min:

> all_min = lapply(all_list, function(x){apply(x,2,min)})

其中'all_list'是我的列表,'all_min'是列表中所有列分钟的向量。我不确定如何获得一个带编号的向量列表(如上例所示),以及如何正确格式化它们。有什么想法吗?

编辑:以下是其中一个框架的示例:

          lx        ly        lz   ...
1  -0.039256 -0.078644 -0.032388 
2  -0.036041 -0.074536 -0.033906 
3  -0.033898 -0.071544 -0.033906

1 个答案:

答案 0 :(得分:3)

可重复数据FTW。

无论如何,这是一个猜测:

lapply( all_list, function(dat) {
   sapply( c(min,max,median), function(fn) apply(dat,2,fn) )
}) 

虽然没有样本数据但很难测试。

这可以通过将函数作为参数传递给sapply来实现。 “一切都是对象”的众多方式之一。

lapply获取all_list的每个元素(在本例中为data.frame),并将其作为第一个参数传递给它给定的函数。该函数的第一个参数是dat,因此每次运行该函数时都会调用data.frame(例如all_list中包含的每个data.frame)。

然后sapply的工作方式与lapply类似,但如果可以的话,会做一些可爱的安排。因此它需要一个函数c(min,max,median)的向量,并依次将它们分配给函数的第一个参数。该函数的第一个参数是fn,因此每次运行时都会调用每个函数。凉。

现在我们有all_list中名为dat的单个data.frame和一个名为fn的函数,这是一个简单的函数,可以执行您最初设置的内容 - -apply是对data.frame的每一列的汇总函数。

最后一步是sapply发挥作用,以整齐的形式返回输出矩阵。然后lapply将该矩阵作为列表的一个元素包含在内,它最终会回馈给您。