将R数据帧写入唯一的文件格式

时间:2014-02-11 18:01:40

标签: r format

我正在寻找一位了解R和文件格式/扩展的人。我试图将Excel的某些方向转换为R脚本。我从一个.txt的文件开始,并希望最终得到一个.met文件。但是,使用适当的扩展名编写文件并不一定能使其格式正确。

我认为.met文件对于我正在运行的程序(APSIM)是唯一的。我可以google关于其他.met文件的信息,但它们不是一回事。那么,什么是.met文件?也许你可以告诉我,如果我告诉你它是如何创建的。

在Excel中制作这些文件:

  1. 输入数据(气象数据 - 每日临时,下雨)
  2. 调整列的空间,使其宽度超出必要范围,但不能太宽。
  3. 将文件另存为格式化文本(空格分隔)(*。prn)文件。
  4. 转到文件夹并将文件扩展名更改为.met
  5. 尝试使用该文件,但发现间距不完全正确,请返回#1。
  6. Official DocumentationFile Format Description

    以下是您的平均会话文件的几行:

    year          day           radn          maxt          mint          rain
    ()            ()            (MJ/m^2)      (oC)          (oC)          (mm)
     1985         1        8.2342         -8.3300      -15.0000     1.27
     1985         2        8.5313         -8.3300      -20.5600     0.00
     1985         3        7.1630         -5.5600      -18.3300     0.00
     1985         4        7.6064         2.7800      -12.7800     0.00
     1985         5        7.0866         3.3300      -8.3300     0.00
     1985         6        7.5471         6.1100      -1.6700     0.00
     1985         7        8.7017         3.3300      -3.3300     0.00
     1985         8        7.7457         1.1100      -15.5600     0.00
     1985         9        2.7429         -5.0000      -9.4400     1.78
     1985         10        5.9049         -5.0000      -12.2200     3.81
    

    一旦我将所有这些数据都放在数据框中,我想要做的就是将它们写成我的程序将识别的格式(.met)。

2 个答案:

答案 0 :(得分:1)

我想这可以回答你的问题,你可以在这里使用你的所有标题,不需要单独打开并继续处理。

dat<-read.table(text="year          day           radn          maxt          mint          rain
()            ()            (MJ/m^2)      (oC)          (oC)          (mm)
 1985         1        8.2342         -8.3300      -15.0000     1.27
 1985         2        8.5313         -8.3300      -20.5600     0.00
 1985         3        7.1630         -5.5600      -18.3300     0.00
 1985         4        7.6064         2.7800      -12.7800     0.00
 1985         5        7.0866         3.3300      -8.3300     0.00
 1985         6        7.5471         6.1100      -1.6700     0.00
 1985         7        8.7017         3.3300      -3.3300     0.00
 1985         8        7.7457         1.1100      -15.5600     0.00
 1985         9        2.7429         -5.0000      -9.4400     1.78
 1985         10        5.9049         -5.0000      -12.2200     3.81", header=T)

#Now header with constants
latC=5
tavC=5
ampC=5
header=paste0("weather.met.weather
latitude = ",latC," (DECIMAL DEGREES)
tav = ", tavC," (oC) ! annual average ambient temperature
amp = ",ampC," (oC) ! annual amplitude in mean monthly temperature")

write(header, "met.met") #writing header
write.table(dat, "met.met", append=T, sep=paste(rep(" ",5), collapse=""), row.names=F, quote=F) #appending to that, work with how many spaces you need, I used 5 here

添加“row.names = F”使列号等于列名数

答案 1 :(得分:0)

根据描述和注释,似乎.met文件只需要比平常更多的空格。这可以通过

简单地实现
write.table(df, file = 'this.met', sep = '     ', 
            rownames = FALSE, quote = FALSE)

其中sep包含多个空格以用于更宽的列。很高兴您的修复很简单:)