格式化,R中的Sprintf

格式化,R中的Sprintf,r,format,printf,R,Format,Printf,我是这个网站的新手,在R中使用sprintf时遇到了一个问题。简单地说,我想做的是: SAB 0.30 0.40 0.50 我需要创建一个带有标题的文本文件,标题以空格分隔,并且必须保持特定的空格,在该空格下方我需要复制一些由X行组成的数字,这取决于数据,我将读取一个由数千行组成的大表,但对于每个ID,将有一个可变的行数;这不是一个大问题,因为我可以循环使用它们。我的问题是我无法对齐标题下方的数字 setwd("C:\\Example\\formatting") 我的数据是CSV格式的,

我是这个网站的新手,在R中使用sprintf时遇到了一个问题。简单地说,我想做的是:

SAB
0.30
 0.40
 0.50
我需要创建一个带有标题的文本文件,标题以空格分隔,并且必须保持特定的空格,在该空格下方我需要复制一些由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
....   ....      ...
所以我的两个问题是:

如何解决上述问题? 因为在该标题的开头,我在SAB之前有一个@间隔,我如何相应地对齐我的所有数字? 我希望我已经很清楚,而不是混乱,这似乎是一个简单的解决方案,但我的R和编程知识只上升到一定程度


提前感谢您的帮助

我认为问题在于你打电话给sprintf。SID1提供了一个值向量,但在字符串中只有一个位置接受输入。把最后一行换成另一行怎么样

 cat(paste(SID1, collapse="\n"))
编辑/更新:

下面是一个可能有效的示例xx表示已组合到矩阵或数据帧中的SID数据

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

非常感谢你的建议!但是如果我需要在它旁边添加另一个SID…1,2,N…以给定的距离将它们隔开,例如:@SAB SSD TAR 0.10 0.09 1.00但是如果我需要在它旁边添加另一个SID…1,2,N…以给定距离将它们隔开,例如:“@SAB SSD TAR”“0.10 0.09 1.00”“0.30 0.10 0.09”“……”我试着像上面写的表格一样写上面这一行。啊,是的。也许您可以将SIDxx数据组合成一个矩阵,然后使用MASS包中的write.matrix函数。我将对上面的内容进行编辑,给出一个例子。太好了,明天早上我会在办公室试试。我会告诉你事情的进展。我没想过要看包裹。谢谢你的建议!