Выберите число строк ниже выделения регулярного выражения, используя вектор цифр c, используя r - PullRequest
0 голосов
/ 29 января 2020

Это следующий вопрос из этого вопроса .

Здесь мне нужно извлечь число X строк ниже регулярного выражения на основе числового c вектора. Кроме того, я пытаюсь l oop выбора регулярных выражений на основе вектора, названного в данном случае range_Labels и включенного в код ниже.

Допустим, у меня есть текстовый файл с именем File следующим образом:

[1] "            2015  YOUTH RISK BEHAVIOR SURVEY RESULTS"                                
 [2] "                            Puerto Rico High School Survey"                          
 [3] "                                               Codebook"                             
 [4] " Data    Variable                              Question      Unweighted  Weighted"   
 [5] "Location  Name                              Code and Label   Frequency  Percentage"  
 [6] "17-17      Q1     How old are you?"                                                  
 [7] "                  1                  12 years old or younger        9         0.7"   
 [8] "                  2                  13 years old                  63         4.2"   
 [9] "                  3                  14 years old                 242        17.0"   
[10] "                  4                  15 years old                 317        21.3"   
[11] "                  5                  16 years old                 487        27.0"   
[12] "                  6                  17 years old                 399        23.0"   
[13] "                  7                  18 years old or older        100         6.8"   
[14] "                                     Missing                        4"               
[15] "18-18      Q2     What is your sex?"                                                 
[16] "                  1                  Female                       822        51.8"   
[17] "                  2                  Male                         790        48.2"   
[18] "                                     Missing                        9"               
[19] "19-19      Q3     In what grade are you?"                                            
[20] "                  1                  9th grade                    393        28.0"   
[21] "                  2                  10th grade                   378        25.6"   
[22] "                  3                  11th grade                   544        23.2"   
[23] "                  4                  12th grade                   300        23.1"   
[24] "                  5                  Ungraded or other grade        4         0.2"   
[25] "                                     Missing                        2"               
[26] "20-20      Q4     Are you Hispanic or Latino?"                                       
[27] "                  1                  Yes                        1,524        95.8"   
[28] "                  2                  No                            66         4.2"   
[29] "                                     Missing                       31"               
[30] "                                                                                   1"
[31] "

А ниже код, который я использую, основан на этот код :

 index_qm <- grep("\\?$", File, perl = TRUE) # qm = question mark (?)

index_qm

index_Missing <- grep("Missing", File, perl = TRUE)
index_Missing

range_Labels <- index_Missing - index_qm - 1

range_Labels

sum(range_Labels)

# Extract labels 2 ----------------------------------------------------------

Labels <- NA

Labels <- 
    lapply(grep("\\?", File, perl = TRUE),

              FUN = function(x){

                  for (i in seq(range_Labels)){ # range_Lables[i] <- 7, 2, 5, 2

                      Labels <- File[x + 1:range_Labels]
                }
                  print(Labels)
              }
         )

Конечный результат, Labels, должен быть списком, равным длине сумма (range_Labels), равная 4, и каждый элемент в Label должен быть равен каждому элементу range_Lables = 7, 2, 5, 2.

Конечный результат, который я ищу:

q1_label <- c
               "13 years old", "14 years old", 
               "15 years old", "16 years old", 
               "17 years old", "18 years old or older")
#
q2_label <- c("Female", "Male")

#
q3_label <- c("9th grade", "10th grade", 
                 "11th grade", "12th grade", 
                 "Ungraded")

#
q4_label <- c("Yes", "No")

Я знаю, что мне здесь не хватает концепции базовых c l oop, но я не смог понять это.

Большое спасибо.

...