2012-01-17 70 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