我想在这个数据集中设置列宽(对于所有 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)
我想在这个数据集中设置列宽(对于所有 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)
从阅读您的问题以及您的评论到以前的答案,在我看来,您正在尝试使用您的数据创建一个固定宽度的文件。如果是这种情况,您可以使用write.fwf
package中的函数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)
您还可以使用sprintf()
从 C 对应的函数派生的函数为数字和字符串编写固定宽度的输出。
例如,用 0 填充整数:
sprintf("%012d",99)
用空格填充: sprintf("%12d",123)
并填充字符串:
sprintf("%20s","hello world")
格式化选项可通过以下方式找到,?sprintf
并且有许多将 C 输出格式化为固定宽度的指南。
听起来您来自 SAS 背景,其中字符变量应指定明确的长度以避免意外截断。在 R 中,您无需担心这一点。一个字符串有它所需要的字符数量,并且随着其内容的变化而自动扩展和收缩。
但是,您应该注意的一件事是将字符变量静默转换为数据框中的因子。但是,除非您稍后更改内容,否则您应该能够使用默认值。