我有一个很大的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)
然后我尝试根据索引列拆分大数据框架,但我无法继续。
答案 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.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
答案 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