在R中生成指定各列专属位置的固定宽度文件的实现方法
R生成指定列位置的固定宽度文本文件实现方案
你可以直接用以下两种方式实现需求,无需额外复杂配置:
先准备你的源数据
把你给出的数据加载到R环境中:
df <- structure(list(Animal = c("dog", "cat", "dog ", "cat"), Fur = c("no", "no", "yes", "yes"), Color = c("Pearl", "Midnight ", "Midnight ", "Pearl")), class = "data.frame", row.names = c(NA, -4L)) # 可选操作:如果需要去掉列值前后多余的空格,执行以下代码 # df[] <- lapply(df, trimws)
方法1:基础R实现(无需安装第三方包)
通过sprintf格式化字符串直接指定各列位置和中间空格填充:
# 定义格式化规则: # %-10s:Animal列左对齐,占10位,对应位置1-10 # %39s:填充39位空格,对应位置11-49 # %-5s:Fur列左对齐,占5位,对应位置50-54 # %45s:填充45位空格,对应位置55-99 # %-21s:Color列左对齐,占21位,对应位置100-120 fmt <- "%-10s%39s%-5s%45s%-21s" # 生成每一行的固定宽度内容 lines <- do.call(sprintf, c(list(fmt), df$Animal, "", df$Fur, "", df$Color)) # 写入到文本文件 writeLines(lines, con = "固定宽度输出文件.txt")
如果需要列内容右对齐,把格式化符里的-删除即可,例如%10s就是右对齐占10位
方法2:用gdata包实现(更直观,直接指定起止位置)
适合不想手动计算空格宽度的场景,直接给每个列指定起止区间:
# 首次使用先安装包 install.packages("gdata") library(gdata) # 直接指定每列的起止位置,写入文件 write.fwf( x = df, file = "固定宽度输出文件.txt", width = list(c(1,10), c(50,54), c(100,120)), rownames = FALSE, # 不输出行号 col.names = FALSE # 不输出列名,需要的话可以改为TRUE )
结果验证
你可以用以下代码校验位置是否符合要求:
# 读取生成的文件 res <- readLines("固定宽度输出文件.txt") # 查看第一行各列内容 substr(res[1], 1, 10) # Animal列 substr(res[1], 50, 54) # Fur列 substr(res[1], 100, 120) # Color列 # 校验每行总长度,预期返回120 nchar(res)
内容的提问来源于stack exchange,提问作者rj44
相关产品推荐
相关产品推荐

