将表数据重新格式化为R中的不同路径

时间:2012-01-17 19:35:11

标签: r dataframe text-files

我有textfile(可以读作数据帧),具有以下属性。

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而不是column将是标题。

 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

我如何实现这一目标?谢谢

1 个答案:

答案 0 :(得分: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