r - 将 data.frame 导出和格式化为 .dat 表
问题描述
我正在寻求帮助,从具有非常严格格式要求的遗留程序创建输入文件(例如df.dat
) 。data.frame
有了这个例子data.frame
:
location <- rep("GDWC1",6)
monyear <- rep(0215, 6)
day <- c(6,7,8,9,10,11)
value <- c(750.00, 3516.00, 8295.00, 11064.00, 3264.00, 111796.00)
df <- data.frame(location, monyear, day, value)
head(df)
# location monyear day value
#1 GDWC1 0215 6 750
#2 GDWC1 0215 7 3516
#3 GDWC1 0215 8 8295
#4 GDWC1 0215 9 11064
#5 GDWC1 0215 10 3264
#6 GDWC1 0215 11 111796
我想要的文件导出(例如 .dat、.txt)格式是没有标题或行 ID,第一列和第二列之间有 6 个空格(始终是四个值 - 这里是 0215),右对齐的第三列(2-第 2 列和第 3 列之间有 3 个空格),第 3 列和第 4 列之间至少有 2 个空格,并添加.00
到第 4 列并强制执行小数对齐。
所需的df.dat:
GDWC1 0215 6 750.00
GDWC1 0215 7 3516.00
GDWC1 0215 8 8295.00
GDWC1 0215 9 11064.00
GDWC1 0215 10 3264.00
GDWC1 0215 11 111796.00
write.table()
在获得列间距、日期列的右对齐以及值列的小数对齐方面,我一直没有成功。有任何想法吗?谢谢!
解决方案
这是一种方法sprintf
:
result <- apply(df,1,function(x){
paste0(x["location"],
sprintf("%6s",""),
sprintf("%04s",x["monyear"]),
sprintf("%4s",x["day"]),
sprintf("%11.2f",as.numeric(x["value"]))
)})
write.table(result,
file = "file.dat",
col.names = FALSE,
row.names = FALSE,
quote = FALSE)
system("cat file.dat")
GDWC1 0215 6 750.00
GDWC1 0215 7 3516.00
GDWC1 0215 8 8295.00
GDWC1 0215 9 11064.00
GDWC1 0215 10 3264.00
GDWC1 0215 11 111796.00
有关help(sprintf)
格式如何工作的详细信息,请参阅。
推荐阅读
- apache-nifi - 从 Apache Flume sink 摄取 Avro 到 Apache NIFI
- python - 试图用循环标记多个单词
- ios - 无需先向上滚动即可显示搜索栏?
- javascript - TypeError:无法解构“未定义”或“空”的属性“queryResult”
- node.js - JSON解析错误JSON代码验证正确,错误仍然存在
- django - 在哪里以及如何编辑默认的 Django 主页
- c - 为什么我的小 C 程序使用 cat 实用程序打印不同的字符串?
- python - 为什么我的 cogs 中的错误不会显示在 pycharm 的控制台中
- javascript - 循环并在javascript中的数组对象键中使用条件库创建编号
- google-chrome - IE浏览器中的vue框架 IE浏览器有坏图