在 R 中打开和保存“.dat”文件
Opening and Saving a ".dat" file in R
我目前正在尝试处理“.dat 文件”以更改文件中的某些值。我在用
read.delim()
将其导入 R 并运行。但是当我想再次保存文件时,格式改变了,我不能再使用了。我用了write.csv(Tin, file ="TinNew.dat")
。
我希望屏幕截图有助于理解我的问题,我还留下了一段数据,作为可重现的示例。我想要与“编辑器(原始)”中显示的格式相同。我怎样才能做到这一点?
提前致谢
编辑原创:
编辑器(我尝试保存后):
Time [d] T_in [degC]
0 2
-1 -1.00 0.00
1 3.08503 3.08503
2 2.01752 2.01752
3 2.4856 2.4856
4 2.14033 2.14033
5 2.35846 2.35846
有两个问题,header 和分隔符。 Header: 将测量单位和列名一起放在第一行是不切实际的,因为这会使 header 的创建变得困难。这在 R 中当然是可能的,但为了避免复杂化,让我们跳过第一行并在后面添加 header。
txt <-
"Time [d] T_in [degC]
0 2
-1 -1.00 0.00
1 3.08503 3.08503
2 2.01752 2.01752
3 2.4856 2.4856
4 2.14033 2.14033
5 2.35846 2.35846"
dat <- read.table(text=txt, skip=1)
names(dat) <- c("Time [d]", "T_in [degC]")
请注意,我将数据直接嵌入到代码中,并从 txt
字符串而不是文件中读取。它与使用 read.table(file=filename, skip=1)
的文件相同。 read.table
的默认 分隔符 是白色 space,即 space 或制表符。
要写回文件,请使用 write.table
和以下选项:
write.table(dat, file="output.dat", sep=" ", quote=FALSE, row.names = FALSE)
这里我们再次使用 space " "
作为分隔符,但在这种情况下使用制表符 "\t"
可能会更好。
更多细节可以在帮助页面找到,在那里可以看到 read.delim
和 write.csv
只是一个方便的功能,即 read.table
和 write.table
的版本具有不同的默认值。
替代方法
最后,我们看到第 2 行只有两个值,所以想法是分开处理 two-lines header 和数据。 readLines
按原样分别读取n=2
行,然后read.table
读取数据。然后类似地进行写入:
header <- readLines("input.dat", n=2)
dat <- read.table(text=txt, skip=2)
writeLines(header, "output.dat")
write.table(dat, "output.dat", sep="\t",
quote=FALSE, col.names=FALSE, row.names = FALSE, append=TRUE)
我目前正在尝试处理“.dat 文件”以更改文件中的某些值。我在用
read.delim()
将其导入 R 并运行。但是当我想再次保存文件时,格式改变了,我不能再使用了。我用了write.csv(Tin, file ="TinNew.dat")
。
我希望屏幕截图有助于理解我的问题,我还留下了一段数据,作为可重现的示例。我想要与“编辑器(原始)”中显示的格式相同。我怎样才能做到这一点?
提前致谢
编辑原创:
编辑器(我尝试保存后):
Time [d] T_in [degC]
0 2
-1 -1.00 0.00
1 3.08503 3.08503
2 2.01752 2.01752
3 2.4856 2.4856
4 2.14033 2.14033
5 2.35846 2.35846
有两个问题,header 和分隔符。 Header: 将测量单位和列名一起放在第一行是不切实际的,因为这会使 header 的创建变得困难。这在 R 中当然是可能的,但为了避免复杂化,让我们跳过第一行并在后面添加 header。
txt <-
"Time [d] T_in [degC]
0 2
-1 -1.00 0.00
1 3.08503 3.08503
2 2.01752 2.01752
3 2.4856 2.4856
4 2.14033 2.14033
5 2.35846 2.35846"
dat <- read.table(text=txt, skip=1)
names(dat) <- c("Time [d]", "T_in [degC]")
请注意,我将数据直接嵌入到代码中,并从 txt
字符串而不是文件中读取。它与使用 read.table(file=filename, skip=1)
的文件相同。 read.table
的默认 分隔符 是白色 space,即 space 或制表符。
要写回文件,请使用 write.table
和以下选项:
write.table(dat, file="output.dat", sep=" ", quote=FALSE, row.names = FALSE)
这里我们再次使用 space " "
作为分隔符,但在这种情况下使用制表符 "\t"
可能会更好。
更多细节可以在帮助页面找到,在那里可以看到 read.delim
和 write.csv
只是一个方便的功能,即 read.table
和 write.table
的版本具有不同的默认值。
替代方法
最后,我们看到第 2 行只有两个值,所以想法是分开处理 two-lines header 和数据。 readLines
按原样分别读取n=2
行,然后read.table
读取数据。然后类似地进行写入:
header <- readLines("input.dat", n=2)
dat <- read.table(text=txt, skip=2)
writeLines(header, "output.dat")
write.table(dat, "output.dat", sep="\t",
quote=FALSE, col.names=FALSE, row.names = FALSE, append=TRUE)