设置数据集中的列宽

时间:2011-10-21 02:52:10

标签: r fixed-width multiple-columns

我想在此数据集中设置列宽(对于所有3列),如:anim = 1-10; sireid = 11-20; damid = 21-30。有些列缺少值。

anim=c("1A038","1C467","2F179","38138","030081")
sireid=c("NA","NA","1W960","1W960","64404")
damid=c("NA","NA","1P119","1P119","63666")

mydf=data.frame(anim,sireid,damid)

3 个答案:

答案 0 :(得分:3)

从阅读您的问题以及您的评论到之前的答案,在我看来,您正在尝试使用您的数据创建固定宽度文件。如果是这种情况,您可以使用包write.fwf中的gdata函数:

加载包并创建一个临时输出文件:

library(gdata)
ff <- tempfile()

将数据以固定宽度格式写入临时文件:

write.fwf(mydf, file=ff, width=c(10,10,10), colnames=FALSE)

使用scan读取文件并打印结果(以演示固定宽度输出):

zz <- scan(ff, what="character", sep="\n")
cat(zz, sep="\n")

1A038      NA         NA        
1C467      NA         NA        
2F179      1W960      1P119     
38138      1W960      1P119     
030081     64404      63666    

删除临时文件:

unlink(ff)

答案 1 :(得分:2)

您还可以使用sprintf()函数为数字和字符串编写固定宽度输出,该函数派生自C的对应函数。

例如,用0填充整数:

sprintf("%012d",99)

用空格填充:     的sprintf( “%12d的”,123)

填充字符串:

sprintf("%20s","hello world")

格式化选项可以通过?sprintf找到,并且有很多指南可以将C输出格式化为固定宽度。

答案 2 :(得分:0)

听起来你是来自SAS背景,其中字符变量应该指定明确的长度以避免意外截断。在R中,您不必担心这一点。字符串具有所需的完全相同的字符数,并随着内容的更改自动扩展和收缩。

但是,您应该注意的一件事是将字符变量静默转换为数据框中的因子。但是,除非您稍后更改内容,否则您应该能够使用默认值。