2012-01-17 75 views
0

我有具有以下属性的textfile(可以作为数据框读取)。将表格数据重新格式化为R中的不同方式

group <- c(1,1,1,1, 2,2,2, 3,3, 4,4,4,4) 
name <- c("1_1", "1_2", "1_3", "1_4", "2_1", "2_2", "2_3", "3_1", "3_2", "4_1", "4_2", "4_3", "4_4") 
distance <- c(0:3, 0:2, 0:1, 0:3) 
mydf <- data.frame (group, name, distance) 
mydf 
    group name distance 
1  1 1_1  0 
2  1 1_2  1 
3  1 1_3  2 
4  1 1_4  3 
5  2 2_1  0 
6  2 2_2  1 
7  2 2_3  2 
8  3 3_1  0 
9  3 3_2  1 
10  4 4_1  0 
11  4 4_2  1 
12  4 4_3  2 
13  4 4_4  3 

欲需要被由其他软件中的以下格式,其中基团,而不是列将标题读出输出数据帧(最终txt文件)。

group 1 
    1_1  0 
    1_2  1 
    1_3  2 
    1_4  3 

    group 2 
    2_1  0 
    2_2  1 
    2_3  2 

    group 3 
    3_1  0 
    3_2  1 

    group 4 
    4_1  0 
    4_2  1 
    4_3  2 
    4_4  3 

我该如何实现这个目标?谢谢

回答

3

我假设输出中的变量缩进不是一个需求;如果是这样,这些答案将不得不进行调整。这两个示例都写入一个文件“file.txt”。

这里是仅使用基函数的方法:

spt <- split(mydf, mydf$group) 
sink("file.txt") 
invisible(lapply(spt, function(DF) { 
    cat("group ") 
    cat(DF$group[1]) 
    cat("\n") 
    write.table(DF[,-1], row.names=FALSE, col.names=FALSE, quote=FALSE) 
    cat("\n") 
})) 
sink() 

下面是使用plyr

library("plyr") 
sink("file.txt") 
d_ply(mydf, .(group), function(DF) { 
    cat("group ") 
    cat(DF$group[1]) 
    cat("\n") 
    write.table(DF[,-1], row.names=FALSE, col.names=FALSE, quote=FALSE) 
    cat("\n") 
}) 
sink() 

这两种产生相同的文件类似的方法:

group 1 
1_1 0 
1_2 1 
1_3 2 
1_4 3 

group 2 
2_1 0 
2_2 1 
2_3 2 

group 3 
3_1 0 
3_2 1 

group 4 
4_1 0 
4_2 1 
4_3 2 
4_4 3 
+0

是的,是不是一个要求,谢谢你的回复它很酷.. – jon 2012-01-17 20:17:28