2013-02-27 36 views
4

我有一個很大的data.frame(144列)。我想將它分成3列組(子文件或子數據幀),然後將子數據幀保存在分開的文件中。 換句話說:file1將包含從1到3的列,file2將包含從6到9等的列。拆分並保存爲新數據。框架

任何想法?

只是一個例子:

Hb1 Int1 Value1 Hb2 Int2 Value2   
    A  c  0.3  SW n  0.34   
    V  sd 0.45 FG b  0.345  
    N  wer 0.76 GH m  0.67 

所以:文件 「輸出1」 將包含:

Hb1 Int1 Value1 
    A  c  0.3 
    V  sd 0.45  
    N  wer 0.76 

文件 「輸出2」 將包含:

Hb2 Int2 Value2  
SW  n 0.34  
FG  b 0.345  
GH  m 0.67 

等等。

我試圖將列添加到含有指數值,使得轉置data.frame:

指數=代表(1:48,每= 3)

然後我試圖根據索引列拆分大數據框,但我無法繼續。

+0

我和簡單的解決方案 – Fuv8 2013-02-27 16:40:30

回答

4

也許這是對您有用:

# A simple function (EDIT: FIXED) 
Split_and_save_DF <- function(DF, split){ 
    # Spliting your data frame by columns to get several data.frames 
    DFlist <-lapply(seq(1, ncol(DF), split), function(x, i){x[, i:(i+(split-1))]}, x=DF) 
    # Saving each data.frames as .txt file 
    invisible(sapply(1:length(DFlist), function(x, i) write.table(x[[i]], file=paste0('DF', i, '.txt')), x=DFlist)) 
} 

DF <- data.frame(matrix(rnorm(144*12, 100, 30), ncol=144)) 
dim(DF) # a dataframe with 12 rows and 144 cols 
Split_and_save_DF(DF=DF, split=3) # will produce 48 DF's 

哪裏DF是data.frame,並split是你想要的數據幀被拆分的列數。

這不是一個很好的答案,但它做你想做的。

此功能會分裂你的DF,將節省每一個新的DF在當前的工作目錄與名稱,如:DF1.txtDF2.txtDF3.txt ....所以,你可以通過做閱讀每個文件:

read.table("DF1.txt", header=TRUE) # and so on 

爲了檢查輸出:

dim(read.table("DF1.txt", header=TRUE)) # checking dims of new DF's 
[1] 12 3 
+0

Jiber編輯你好!不幸的是它不起作用。它返回包含每個12列和10行的新文件作爲輸入中使用的DF。無論如何,非常感謝你! – Fuv8 2013-02-27 16:55:08

+0

@ Fuv8你確定?我已經測試它使用輸入data.frame由12行和144列(相同數量的cols,你有),我的函數產生44個新的數據框,這是144/3 = 48以來是正確的。在我的編輯中看到新的例子。 – 2013-02-27 17:00:01

+0

我嘗試了另一次以確保。 – Fuv8 2013-02-27 17:03:12

3

你接近與Index = rep(1: 48, each = 3),你可以用它來拆分的列名。

lapply(split(colnames(DF), 
      rep(1:48,each=3)), 
     function(x)DF[,x]) 

測試它與@Jilber例如:

colnames(DF) <- paste(c('Hb','Int', 'Value'),rep(1:48,each=3),sep='') 

> ll <- lapply(split(colnames(DF), 
+    rep(1:48,each=3)), 
+  function(x)DF[,x]) 
> head(ll) 
$`1` 
     Hb1  Int1 Value1 
1 155.56103 114.70061 50.15758 
2 100.91212 108.93485 138.43324 
3 65.02612 97.95829 60.55026 
4 102.85399 99.80714 74.53144 
5 152.52558 100.28795 109.27979 
6 110.84282 122.67727 100.60916 
7 100.06572 92.96498 118.99915 
8 104.69424 91.46041 38.57983 
9 74.59960 119.89719 158.41313 
10 100.89299 85.79222 122.57668 
11 92.87294 84.40889 95.39005 
12 81.20039 127.29311 92.19261 

$`2` 
     Hb2  Int2 Value2 
1 101.27385 96.21813 21.83450 
2 124.26445 117.29466 53.67718 
3 144.58042 111.06022 91.92567 
4 120.74942 98.63582 123.98479 
5 95.74860 79.96633 149.62814 
6 74.78898 68.25731 122.72720 
7 132.12760 97.76982 56.66394 
8 47.18706 118.68346 113.63118 
9 115.27