我有一个包含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
答案 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
将该矩阵作为列表的一个元素包含在内,它最终会回馈给您。