Как перебрать блок строк в тексте, используя R - PullRequest
0 голосов
/ 24 июня 2019

У меня большой текстовый файл с блоком строк. Ниже я добавил образец текстового файла. Каждая третья строка блоков имеет специальное название профиля грунта, например «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                                                                                                  

Заранее благодарю за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...