我想在此数据集中设置列宽(对于所有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)
答案 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中,您不必担心这一点。字符串具有所需的完全相同的字符数,并随着内容的更改自动扩展和收缩。
但是,您应该注意的一件事是将字符变量静默转换为数据框中的因子。但是,除非您稍后更改内容,否则您应该能够使用默认值。