У меня большой текстовый файл с блоком строк. Ниже я добавил образец текстового файла.
Каждая третья строка блоков имеет специальное название профиля грунта, например «HC_GEN0011».
Затем, каждая седьмая строка блоков содержит значение в строке «SLOC». Я хотел бы изменить это значение для первого слоя с новыми значениями SLOC, которые взяты из фрейма данных hcprofname.
*ET03899254 ETH SandClayL 200 ISRIC soilgrids + HC27
@SITE COUNTRY LAT LONG SCS Family
-99 ET 14.792 37.875 HC_GEN0011
@ SCOM SALB SLU1 SLDR SLRO SLNF SLPF SMHB SMPX SMKE
BK 0.10 6.00 0.50 75.00 1.00 1.00 SA001 SA001 SA001
@ SLB SLMH SLLL SDUL SSAT SRGF SSKS SBDM SLOC SLCL SLSI SLCF SLNI SLHW SLHB SCEC SADC
5 A 0.165 0.273 0.401 1.00 0.53 1.32 2.78 27.41 21.92 -99.0 0.12 6.61 -99.0 22.1 -99.0
15 A 0.177 0.287 0.404 0.85 0.41 1.33 2.36 29.54 20.91 -99.0 0.09 6.68 -99.0 19.4 -99.0
30 AB 0.192 0.303 0.410 0.70 0.31 1.36 1.80 32.03 19.95 -99.0 0.07 6.78 -99.0 18.8 -99.0
60 BA 0.207 0.320 0.416 0.50 0.23 1.42 1.15 34.50 18.92 -99.0 0.06 6.89 -99.0 19.7 -99.0
100 B 0.206 0.319 0.415 0.38 0.23 1.48 0.68 34.47 18.29 -99.0 0.05 7.02 -99.0 19.8 -99.0
200 BC 0.197 0.306 0.410 0.05 0.28 1.53 0.39 32.81 17.92 -99.0 0.05 7.21 -99.0 19.8 -99.0
*ET04335621 ETH ClayLoam 200 ISRIC soilgrids + HC27
@SITE COUNTRY LAT LONG SCS Family
-99 ET 6.375 41.792 HC_GEN0014
@ SCOM SALB SLU1 SLDR SLRO SLNF SLPF SMHB SMPX SMKE
BK 0.10 6.00 0.50 75.00 1.00 1.00 SA001 SA001 SA001
@ SLB SLMH SLLL SDUL SSAT SRGF SSKS SBDM SLOC SLCL SLSI SLCF SLNI SLHW SLHB SCEC SADC
5 A 0.190 0.312 0.416 1.00 0.29 1.26 0.75 31.69 27.53 -99.0 0.08 8.25 -99.0 31.4 -99.0
15 A 0.202 0.325 0.422 0.85 0.23 1.28 0.64 33.74 26.66 -99.0 0.06 8.33 -99.0 27.5 -99.0
30 AB 0.218 0.342 0.430 0.70 0.17 1.31 0.48 36.49 25.61 -99.0 0.05 8.42 -99.0 26.7 -99.0
60 BA 0.233 0.357 0.437 0.50 0.13 1.36 0.32 38.93 24.27 -99.0 0.04 8.53 -99.0 27.9 -99.0
100 B 0.233 0.356 0.436 0.38 0.13 1.42 0.20 38.93 23.66 -99.0 0.04 8.68 -99.0 28.0 -99.0
200 BC 0.223 0.345 0.430 0.05 0.16 1.47 0.10 37.29 23.42 -99.0 0.05 8.85 -99.0 28.0 -99.0
hcprofname;
Soil Prof. SLOC_new
HC_GEN0001 1.40
HC_GEN0002 1.40
HC_GEN0003 1.40
HC_GEN0004 1.00
HC_GEN0005 1.00
HC_GEN0006 1.00
HC_GEN0007 0.40
HC_GEN0008 0.40
HC_GEN0009 0.40
HC_GEN0010 1.40
HC_GEN0011 1.40
HC_GEN0012 1.40
HC_GEN0013 1.00
HC_GEN0014 1.00
HC_GEN0015 1.00
HC_GEN0016 0.40
HC_GEN0017 0.40
HC_GEN0018 0.40
HC_GEN0019 1.40
HC_GEN0020 1.40
HC_GEN0021 1.40
HC_GEN0022 1.00
HC_GEN0023 1.00
HC_GEN0024 1.00
HC_GEN0025 0.40
HC_GEN0026 0.40
HC_GEN0027 0.40
Я хотел бы изменить значение для каждого профиля почвы. Кроме того, я хотел бы зациклить это для всего профиля почвы от HC_GEN0001 до HC_GEN0027.
Workdir <- "...\\ET.SOL"
f <- readLines(Workdir)
a<-seq(3, length(f), 13)
b<-seq(7, length(f), 13)
for ( i in 1:length(a)){
for (j in 1:length(b)){
ifelse((grepl("11", (substring(f[a[i]], 48, 58)))),
(f <- gsub((substring(f[b[j]], 51, 54)) , hcprofname[11,2], f)) , f )}
}
Желаемый результат;
*ET03899254 ETH SandClayL 200 ISRIC soilgrids + HC27
@SITE COUNTRY LAT LONG SCS Family
-99 ET 14.792 37.875 HC_GEN0011
@ SCOM SALB SLU1 SLDR SLRO SLNF SLPF SMHB SMPX SMKE
BK 0.10 6.00 0.50 75.00 1.00 1.00 SA001 SA001 SA001
@ SLB SLMH SLLL SDUL SSAT SRGF SSKS SBDM SLOC SLCL SLSI SLCF SLNI SLHW SLHB SCEC SADC
5 A 0.165 0.273 0.401 1.00 0.53 1.32 1.40 27.41 21.92 -99.0 0.12 6.61 -99.0 22.1 -99.0
15 A 0.177 0.287 0.404 0.85 0.41 1.33 2.36 29.54 20.91 -99.0 0.09 6.68 -99.0 19.4 -99.0
30 AB 0.192 0.303 0.410 0.70 0.31 1.36 1.80 32.03 19.95 -99.0 0.07 6.78 -99.0 18.8 -99.0
60 BA 0.207 0.320 0.416 0.50 0.23 1.42 1.15 34.50 18.92 -99.0 0.06 6.89 -99.0 19.7 -99.0
100 B 0.206 0.319 0.415 0.38 0.23 1.48 0.68 34.47 18.29 -99.0 0.05 7.02 -99.0 19.8 -99.0
200 BC 0.197 0.306 0.410 0.05 0.28 1.53 0.39 32.81 17.92 -99.0 0.05 7.21 -99.0 19.8 -99.0
*ET04335621 ETH ClayLoam 200 ISRIC soilgrids + HC27
@SITE COUNTRY LAT LONG SCS Family
-99 ET 6.375 41.792 HC_GEN0014
@ SCOM SALB SLU1 SLDR SLRO SLNF SLPF SMHB SMPX SMKE
BK 0.10 6.00 0.50 75.00 1.00 1.00 SA001 SA001 SA001
@ SLB SLMH SLLL SDUL SSAT SRGF SSKS SBDM SLOC SLCL SLSI SLCF SLNI SLHW SLHB SCEC SADC
5 A 0.190 0.312 0.416 1.00 0.29 1.26 1.00 31.69 27.53 -99.0 0.08 8.25 -99.0 31.4 -99.0
15 A 0.202 0.325 0.422 0.85 0.23 1.28 0.64 33.74 26.66 -99.0 0.06 8.33 -99.0 27.5 -99.0
30 AB 0.218 0.342 0.430 0.70 0.17 1.31 0.48 36.49 25.61 -99.0 0.05 8.42 -99.0 26.7 -99.0
60 BA 0.233 0.357 0.437 0.50 0.13 1.36 0.32 38.93 24.27 -99.0 0.04 8.53 -99.0 27.9 -99.0
100 B 0.233 0.356 0.436 0.38 0.13 1.42 0.20 38.93 23.66 -99.0 0.04 8.68 -99.0 28.0 -99.0
200 BC 0.223 0.345 0.430 0.05 0.16 1.47 0.10 37.29 23.42 -99.0 0.05 8.85 -99.0 28.0 -99.0
Заранее благодарю за помощь!