0

我想在这个数据集中设置列宽(对于所有 3 列),如:anim=1-10; 西雷德=11-20;达米德=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)
4

3 回答 3

3

从阅读您的问题以及您的评论到以前的答案,在我看来,您正在尝试使用您的数据创建一个固定宽度的文件。如果是这种情况,您可以使用write.fwfpackage中的函数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)
于 2011-10-31T05:44:38.453 回答
2

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

例如,用 0 填充整数:

sprintf("%012d",99)

用空格填充: sprintf("%12d",123)

并填充字符串:

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

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

于 2011-10-31T12:12:10.823 回答
0

听起来您来自 SAS 背景,其中字符变量应指定明确的长度以避免意外截断。在 R 中,您无需担心这一点。一个字符串有它所需要的字符数量,并且随着其内容的变化而自动扩展和收缩。

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

于 2011-10-21T03:32:53.587 回答