2011-03-14 77 views
1

如何獲取所有可能的列數小於(或數據框架)的列原矩陣(或data.frame)如何從原始矩陣(或數據幀)中獲得列數較少的所有可能的矩陣(或data.frames)

例如,可以說我有一個矩陣(或data.frame)tmp

structure(list(V1 = 1:5, V2 = 6:10, V3 = 11:15, V4 = 16:20, V5 = 21:25), 
.Names = c("V1", "V2", "V3", "V4", "V5"), row.names = c(NA, -5L), 
class = "data.frame") 

我怎樣纔能有效地得到:TMP [ - 1],TMP [ ,-2],tmp [,-3],tmp [,-4]和tmp [,-5]

此刻我可以想到:

llply(list(1,2,3,4,5), function(x) {tmp[[x]] <- NULL; tmp}) 

這也可以使用lapply來完成。有沒有更好或更直觀和有效的方法來做到這一點,特別是當tmp是矩陣(沒有做as.data.frame(tmp))?

非常感謝您的幫助或指點。

回答

4

爲什麼不

lapply(1:ncol(tmp),function(i)tmp[,-i]) 

既適用矩陣和數據幀。

看不出如何做得更直觀。

3

你可以用簡單的索引與lapply做到這一點:

R> tmp <- matrix(1:10000,nrow=100,ncol=100) 
R> lapply(1:ncol(tmp), function(i) {tmp[,-i]}) 

也許還有一個更有效的解決方案,但我認爲,使用這種方法的主要問題是,如果你原來的矩陣中有一個大數目列(說nlapply函數的結果將是巨大的(因爲它將是一個列表n-1矩陣),並且您可能會用盡內存來處理它。

相關問題