拆分并保存在新的data.frames中

时间:2013-02-27 16:15:53

标签: r

我有一个很大的data.frame(144列)。我想将它分成3列(子文件或子data.frame)组,然后将子data.frames保存在单独的文件中。 换句话说: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

所以:文件“output1”将包含:

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

文件“output2”将包含:

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

等等。

我尝试在包含Index值的转置data.frame中添加一列,以便:

  

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

然后我尝试根据索引列拆分大数据框架,但我无法继续。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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