格式化,R

时间:2015-09-17 16:06:19

标签: r format printf

我对这个网站很新,我在使用sprintf时遇到了问题。我想要做的是以下内容:

我需要创建一个带有标题的文本文件(空格分隔并且必须维护该特定空间),在这之下我需要复制一些由X行组成的数字(取决于数据,我会读到一个大的由数千行组成的表,但对于每个ID,将有可变数量的行;这不是一个主要问题,因为我可以循环它们)。我的问题是我无法对齐标题下方的数字。

setwd("C:\\Example\\formatting")

我的数据是CSV格式,所以我读到了:

s100 = read.csv("example.csv", header=T)

然后我拿出我感兴趣的列并以这种方式转换它:

SID1 = as.vector(as.matrix(s100$Row1))
SID2 = as.vector(as.matrix(s100$Row2))
SID3 = as.vector(as.matrix(s100$Row3))
SIDN = as.vector(as.matrix(s100$RowN))

然后我有以下内容(不要担心这些字母,那部分到某一点真的很容易,当我需要阅读SID时,我卡在最后:

sink("Example.xxx", append = T)
cat("*Some description goes here\n")

这一直持续到我需要把数字放下来。所以,当我到达这篇文章时:

cat("@  SAB   SSD   TAR.....", sep = "\n")

我现在需要在SAB,SSD,TAR等下对齐数字等等。 所以,现在我执行以下操作(我只尝试先使用一列和一个标题):

cat("SAB ", sep = "\n")
cat(sprintf("%s\n", SID1, sep="\n" ))

但是,我最终得到的是:

SAB
0.30
 0.40
 0.50

而不是

 SAB    SSD     TAR
0.30   0.40      10
0.40   0.80      40
0.50   0.90      00
....   ....      ...

所以我的两个问题是:

  1. 如何解决上述问题?
  2. 因为在那个标题的开头我在“SAB”之前有一个“@”间隔,我如何相应地对齐所有数字?
  3. 我希望我一直很清楚,而不是凌乱,这似乎是一个简单的解决方案,但我对R和编程的知识只能达到某一点。

    提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为问题在于你对sprintf的呼唤。 SID1提供值向量,但您的字符串中只有一个接受输入的位置。如何用

替换最后一行
 cat(paste(SID1, collapse="\n"))

EDIT / UPDATE:

这是一个可行的示例(xx表示已合并到矩阵或数据框中的SID数据)

library(MASS)
xx <- matrix(rnorm(100),10)
write.matrix(round(xx, 2))