我有这种格式的文件。
F 0 0.700 99.000 -99.000 .10
T 0 TEMPMW1 25.000 500.000 .10
T 0 TEMPMW2 50.000 5000.000 .10
T 0 0.500 0.050 0.950 .10
T 0 0.500 0.050 0.950 .10
T 0 0.500 0.050 0.950 .10
而且我想在循环中将变量替换为值,但从左开始不得超过13个字符。
格式基本上是:(L1,1X,I1,1X,3(F9.3,1X)
x1 = 370.1164442
x2 = 4651.9392221
然后做
readLines(paramTemplate) %>% #Reads the template file and replaces the placeholders
gsub(pattern = "TEMPMW1", replace = format(x1, width=9, justify='none', nsmall=3, digits=3)) %>%
gsub(pattern = "TEMPMW2", replace = format(x2, width=9, justify='none', nsmall=3, digits=3))
正在替换值
F 0 0.700 99.000 -99.000 .10
T 0 370.116 25.000 500.000 .10
T 0 4651.939 50.000 5000.000 .10
T 0 0.500 0.050 0.950 .10
F 0 0.700 99.000 -99.000 .10
T 0 370.116 25.000 500.000 .10
T 0 4651.939 50.000 5000.000 .10
T 0 0.500 0.050 0.950 .10
我该怎么做?
答案 0 :(得分:0)
有效的non-solution
:
使所有占位符相等。保持开放以供其他解决方案使用。
T 0 TEMPMW1SS 25.000 500.000 .10
T 0 TEMPMW2SS 50.000 5000.000 .10
T 0 0.500 0.050 0.950 .10
T 0 0.500 0.050 0.950 .10
T 0 0.500 0.050 0.950 .10
答案 1 :(得分:0)
一个选择是用space
填充一列中的值,这样一列的所有值都具有与该列中最大字符长度相同的宽度。
使用dplyr
的解决方案可以是:
library(dplyr)
df %>%
mutate_all(funs(sprintf(paste("%",max(length(as.character(.))),"s"), as.character(.))))
# V1 V2 V3 V4 V5 V6
# 1 FALSE 0 0.700 99 -99 0.1
# 2 TRUE 0 TEMPMW1 25 500 0.1
# 3 TRUE 0 TEMPMW2 50 5000 0.1
# 4 TRUE 0 0.500 0.05 0.95 0.1
# 5 TRUE 0 0.500 0.05 0.95 0.1
# 6 TRUE 0 0.500 0.05 0.95 0.1
数据:
df <- read.table(text =
"F 0 0.700 99.000 -99.000 .10
T 0 TEMPMW1 25.000 500.000 .10
T 0 TEMPMW2 50.000 5000.000 .10
T 0 0.500 0.050 0.950 .10
T 0 0.500 0.050 0.950 .10
T 0 0.500 0.050 0.950 .10")