2012-12-10 51 views
1

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

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

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

...

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

我已经生成每一列这样做的分钟:

> 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 
+0

感谢您的例子更新!只是为了将来的问题,看看[准则](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。特别是,使用'dput'可以让那些试图回答你的问题的人变得更容易。 –

回答

3

重现的数据FTW。

无论如何,这里有一个猜测:

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

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

这通过将函数作为参数传递给sapply来工作。 R中的“一切都是对象”的许多方法之一。

lapplyall_list(在本例中为data.frame)的每个元素,并将其作为第一个参数传递给它所给出的函数。该函数的第一个参数是dat,所以这就是每次运行该函数时将调用data.frame(例如,包含在all_list中的每个data.frame)。

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

所以现在我们有,在all_list一个data.frame称为dat并呼吁fn一个单一的功能,一个简单的函数,做什么你最初规定 - 申请的是:摘要函数将数据的每一列。帧。

最后一步是sapply发挥它的魔力返回一个矩阵与输出在一个整齐的形式。然后lapply将该矩阵作为列表中的一个元素,并最终返回给您。

+0

谢谢,这工作完美。请原谅我的noobishness,我是堆栈溢出的新手(对于这个问题,对R来说是相当新的)。任何人都可以向我解释那是什么吗? – user1892115

+0

添加了它如何工作的解释,并修复了错字(谢谢@agstudy!)。 –

相关问题