在粘贴R时如何正确调整字符串的格式?

时间:2018-07-06 21:14:45

标签: r string format

我有一个循环读取的文件,需要替换某个变量。

ptl <- readLines("template.txt") %>% 
  gsub(pattern = "TEMPNUM", replace = format(testval) %>% 
  write.table(., paste0("test.txt"), row.names=F, col.names=F, quote = F)

testval在每个循环中都会改变,但我希望它是正确的。

在此,相关行如下:

F 0     0.000   -10.000    10.000 .10   1.0 0 0 0 99 0 0 
T 0   TEMPNUM     1.000     1.001 .10   1.0 0 3 1  0 3 0

现在,很显然,最终文件如下所示:

F 0     0.000   -10.000    10.000 .10   1.0 0 0 0 99 0 0 
T 0  1.0005     1.000     1.001 .10   1.0 0 3 1  0 3 0 

预期结果

F 0     0.000   -10.000    10.000 .10   1.0 0 0 0 99 0 0 
T 0    1.0005     1.000     1.001 .10   1.0 0 3 1  0 3 0 

尝试

  • replace = format(val[1,2]), justify="right")

PS

T 0 TEMPNUM的长度为13个字符,并且在我的所有文件中都是固定的。如果有帮助的话。

1 个答案:

答案 0 :(得分:0)

打开选项是使用write.fwf包中的gdata函数。我已经使用OP提供的数据来创建一个data.frame,并尝试将其写入文件。

library(dplyr)
library(gdata)

df %>% mutate(V3 = gsub(pattern = "TEMPNUM", replace = format(1.05), V3)) %>%
  write.fwf(., paste0("d:\\test.txt"), colnames = FALSE, justify="right", quote = FALSE)

文件内容为:

FALSE 0 0.000 -10 10.000 0.1 1 0 0 0 99 0 0
 TRUE 0  1.05   1  1.001 0.1 1 0 3 1  0 3 0

数据:

df <- read.table(text = 
"F 0     0.000   -10.000    10.000 .10   1.0 0 0 0 99 0 0 
T 0   TEMPNUM     1.000     1.001 .10   1.0 0 3 1  0 3 0",
stringsAsFactors = FALSE)