我有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
我如何实现这一目标?谢谢
答案 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