2012-01-17 5 views
0

次のプロパティを持つテキストファイル(データフレームとして読み取ることができます)があります。テーブルのデータを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"というファイルに書き込みます。ここ

だけ基底関数を用いたアプローチである:

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

:ここ

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() 

を用いて同様のアプローチでありますはい、要件ではありません、返事のおかげでそれはクールです.. – jon

関連する問題