我使用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
感谢您的任何建议。
因为我必须维护格式并从一列更新数字。我提出了一种“混合”的方法。这种方法有效,但我很欣赏有关标准方法的建议。
在循环中替换数字。
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=""))
答案 0 :(得分:2)
只提供适合的sep=
参数。以下是6个空格后跟选项卡的示例:
R> head(trees)
Girth Height Volume
1 8.3 70 10.3
2 8.6 65 10.3
3 8.8 63 10.2
4 10.5 72 16.4
5 10.7 81 18.8
6 10.8 83 19.7
R> write.table(trees, sep=" \t",
+ file="/tmp/trees6spaces.txt", row.names=FALSE, col.names=FALSE)
R> system("head /tmp/trees6spaces.txt")
8.3 70 10.3
8.6 65 10.3
8.8 63 10.2
10.5 72 16.4
10.7 81 18.8
10.8 83 19.7
11 66 15.6
11 75 18.2
11.1 80 22.6
11.2 75 19.9
R>