6

是否可以使用 write.table 格式化输出?

我可以使用制表符左对齐列sep = '\t',并且可以使用两个制表符增加列之间的间距sep = '\t\t'

理想情况下,我希望能够右对齐列并使用比 '\t' 和 '\t\t' 提供的中间量的间距。使用类似sep = '\t '完全破坏列对齐的东西。

我必须证明从使用许多不同表格格式的许多不同文件中提取的大量数据。将 R 的输出文本文件的列间距与原始 pdf 文档中的列间距紧密匹配将大大提高校对的速度和准确性。

# example data to write to text file

aa = matrix(c(1000,110,10,1, 
              0,2000,20,2, 
              30,300,3000,30000), nrow=3, byrow=TRUE,
         dimnames = list(NULL, c("C1", "C2", "C3","C4")))
aa

# left align columns using a tab

write.table(aa,file="c:/users/mark w miller/simple r programs/formatted_tablea.txt", na = 'NA', sep = '\t',
row.names = F, col.names = F)

#   1000    110 10  1
#   0   2000    20  2
#   30  300 3000    30000

# increase spacing between columns with two tabs

write.table(aa,file="c:/users/mark w miller/simple r programs/formatted_tableb.txt", na = 'NA', sep = '\t\t',
row.names = F, col.names = F)

#   1000        110     10      1
#   0       2000        20      2
#   30      300     3000        30000

# Here is an example of the desired right-aligned output 
# format with an intermediate amount of spacing 
# (3 spaces vs the 1 or 7 spaces used above):

#   1000    110     10       1
#      0   2000     20       2
#     30    300   3000   30000

# Maybe use cat somehow? 

cat(file="c:/users/mark w miller/simple r programs/formatted_tablec.txt", aa, sep=c(' ', ' ', '\n'))

还是我必须写入 csv 文件并使用 Excel 打开输出文件?我宁愿避免使用 Excel。或者也许我必须使用 LaTex 创建所需格式的输出数据?

抱歉这周的所有问题。

4

2 回答 2

8

看看capture.output和 print.gap 参数的组合print是否足够:

capture.output( print(aa, print.gap=3), file="capture.txt")

         C1     C2     C3      C4
[1,]   1000    110     10       1
[2,]      0   2000     20       2
[3,]     30    300   3000   30000

另一种策略是使用带有sep=" "(3 个空格)参数的 write.matrix。您将需要忽略无法正确显示的列标题:

require(MASS)
write.matrix(aa, file="capturemat.txt", sep="   ")

C1   C2   C3   C4
 1000     110      10       1
    0    2000      20       2
   30     300    3000   30000
于 2012-06-22T21:01:57.317 回答
4

write.fwfgdata库中的函数对此非常有用。

于 2015-03-27T18:32:11.893 回答