我是stackoverflow的新手,而R是新手。请指出我做错了或者可以做得更好的任何事情,在这个论坛上提问-谢谢!
我在R中有一个矩阵,其中包含按年份和月份汇总的数据,我想每年写出一个文件,每个文件12行(每个月一行),以及一些其他文本,每个输出文件。
我在这个论坛上研究了几种不同的解决方案:
这是一种通过轻敲来创建按名称列出工资矩阵列表,然后将其写入文件的技术:Write many files in a for loop
该示例显示如何向文件添加多行文本:Write lines of text to a file in R
这些具有我想做的元素,但是tapply似乎仅限于一列(示例中为“ salary”),我想抓取3个来写出来。我也在混合编写数据和自由格式的文本。
我在R中的数据如下:
月|年份沉淀|温度| PanEvap
01 | 2018 | 20 | -4 | 12
02 | 2018 | 15 | 0 | 10
03 | 2018 | 60 | 5 | 40
...等等
(抱歉,缺少格式-不确定如何制作表格,或在最终发布中使用固定宽度的字体!)
我需要这样每年输出一个文件(这将被称为“ 18.dat”,即从年份“ 2018”中获取的“ 18”):
“此处有一些文字”
20 -4 12
15 0 10
60 5 40
... etc
“这里有更多文字”
我希望这是有道理的。任何指导和示例代码将不胜感激。
谢谢!
答案 0 :(得分:0)
尝试一下
# Read data
tmp <- data.table::fread('
Month | Year | Precip | Temp | PanEvap
01 | 2018 | 20 | -4 | 12
02 | 2018 | 15 | 0 | 10
03 | 2018 | 60 | 5 | 40
')
years = unique(tmp$Year)
for (i in years){
text1 = "Some text up here"
# remove month and year column
tmp_df =tmp[which(tmp$Year == i),c(-1,-2)]
text2 = "More text down here"
# use file connection with append mode
fileConn <- file(paste0("./",i,".dat"),open="w")
writeLines(text1, fileConn)
close(fileConn)
fileConn <- file(paste0("./",i,".dat"),open="a")
write.table(tmp_df, fileConn,col.names = FALSE,row.names = FALSE)
writeLines(text2,fileConn)
close(fileConn)
}
以及2018年的日期:
Some text up here
20 -4 12
15 0 10
60 5 40
More text down here
答案 1 :(得分:0)
在摆弄了我的代码并进一步了解了其他功能之后,我最终想到了这些,我借鉴了我在第一篇文章中链接的文章(我也更改了一年到2017年,以证明多个文件可以创建):
tmp <- data.table::fread('
Month | Year | Precip | Temp | PanEvap
01 | 2018 | 20 | -4 | 12
02 | 2018 | 15 | 0 | 10
03 | 2017 | 60 | 5 | 40
')
lst <- split(tmp[,3:5], tmp$Year)
lapply(names(lst),
function(x, lst) {cat("some text up here",
file=paste(x,".dat", sep=""), sep="\n",append=FALSE)
write.table(lst[[x]], file=paste(x,".dat", sep=""),
col.names=FALSE, row.names=FALSE, sep="\t",
quote=FALSE, append=TRUE)
cat("some text down here", "and more I needed, separated by a tab",
file=paste(x,".dat", sep=""), sep="\t", append=TRUE)
},
lst)