4

我有一个大数据框架(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

等等。

我尝试向包含索引值的转置 data.frame 添加一列,以便:

索引 = 代表(1:48,每个 = 3)

然后我尝试根据索引列拆分大data.frame,但我无法继续。

4

2 回答 2

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

DFdata.frame在哪里,split是您希望数据框分割的列数。

这不是一个很好的答案,但它可以满足您的需求。

此函数将拆分您的 DF 并将每个新的 DF 保存在您当前的工作目录中,名称如下:DF1.txt, DF2.txt, DF3.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
于 2013-02-27T16:44:02.810 回答
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
于 2013-02-27T17:09:08.937 回答