我正在使用 R 访问一些旧的 FORTRAN 输入文件,并且在将数据框放入文本文件并保持其格式方面存在一些问题。
我的方法是:
- 用于
read.table
导入数据。 - 调整一列中的数字(乘以标量)。
write.table
使用函数保存所有内容。
我的代码:
con <- file(paste(pth,'/Input/met/G_test.MET', sep=""))
aaa <- read.table(con)
aaa[,2]=aaa[,2]*0.1
write.table(aaa)
close(con)
我的方法失败了,因为它改变了输入文件的格式(它忽略了列之间的空格)。我的问题:有没有一种很好的方法来执行这三个步骤并保持相同的格式?我可以readLines
用来保持格式,然后我必须在一个大循环中修改所有数字。
这是数据的外观(我知道列之间的空格数):
010192 0.00 0.04 8.3
010292 0.33 0.02 7.5
010392 0.61 0.23 11.7
010492 0.00 0.04 10.0
010592 0.00 0.07 10.6
010692 0.00 0.02 8.9
010792 0.00 0.19 9.4
010892 0.00 0.30 9.4
010992 0.00 0.08 11.4
感谢您的任何建议。
更新
因为我必须维护格式并更新一列中的数字。我想出了一个“混合”的方法。这种方法有效,但我很欣赏有关标准方法的建议。
- 使用 readLines 将数据加载为字符,以保持格式并保持起始零。
- 使用 read.table 将数据加载为 data.frame 并修改它们
循环替换数字。
con_rain<- file(paste(pth,'/Out_Test/GA1LEVAP.MET', sep="")) a_rain=readLines(con_rain) b_rain=read.table(con_rain) for (i in 1:731){ a_rain[i]=paste(substr(a_rain[i],1,13),sprintf("%3.2f", b_rain[i,2]*p[19]),substr(a_rain[i],18,37),sep="") } writeLines(a_rain, paste(pth,'/Out_Test/GA1LEVAP.MET', sep=""))