2010-07-06 71 views
3

在R中,我想創建一個循環,它將我的數據框的前3000列寫入一個文件,將下一個3000列寫入另一個文件等等,直到所有的列都被分開爲止。什麼是最好的方法來做到這一點?我明白現在通過CRAN可以使用isplit和iterators函數,但我真的不確定如何去做這件事。有什麼建議嗎?在R中,如何創建一個循環來分割數據幀中的列

回答

9

你可以嘗試這樣的:

library(plyr) 
max.col <- ncol(x) 
l_ply(seq(1, max.col, by=3000), function(i) 
    write.table(x[,i:min(i+2999, max.col)], file=paste("i", i, sep="-")) 
) 
+0

謝謝Shane的回覆!我試了一下,結果是一個標題爲「i」的2456列的文件 - 我認爲這是循環的最後一次迭代?我的後續問題是,我現在如何修改此代碼,以便我可以爲輸出的每個文件提供單獨的名稱?例如「i-1」,「i-2」,「i-3」 非常感謝您的幫助,它非常有用!我是編程/編碼的絕對初學者。 – CCA 2010-07-06 20:56:05

+0

對不起......我的錯誤。我更新它以反映您的輸出命名約定。 – Shane 2010-07-06 21:21:26

+0

謝謝Shane!另一個快速跟進 - 如果我想將這些文件輸出到特定的文件夾中 - 比如說「i-1」進入文件夾「A-1」,則「i-2」按順序進入文件夾「A-2」 - 有沒有辦法讓我在file = paste語句中指定它?或者我必須將所有文件寫入一個文件夾,然後找到一種方法將它們複製/移動到相關的文件夾後?我試圖避免這樣做手動,因爲最後會有數百個這樣的文件。再次感謝您的詳細和及時的答覆 - 非常感謝! – CCA 2010-07-07 16:14:19

1

不知道爲什麼你會懶得裝plyr ......假設你的數據幀DF ...(從巴蒂爾的回答偷明智地使用分鐘()的)

maxCol <- ncol(df) 
for (i in seq(1, maxCol, by 3000)) { 
    write.table(df[,i:min(i+2999, maxCol)], "i") 
} 

您可能想要編輯上面的write.table命令以添加您的首選格式。

+0

在這個例子中'plyr'是不必要的(可以使用幾乎所有的應用函數),但是它通常是值得的(這就是爲什麼我用它來演示)。這就是說,for循環允許副作用,所以我儘量避免它們,除非我想鼓勵可能導致「不良」行爲的因素。 – Shane 2010-07-06 20:23:39

相關問題