2012-12-10 108 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!)。 –

相關問題