Как группировать и агрегировать данные.таблица на основе диапазона переменной в r

#r #data.table #pdftools

Вопрос:

У меня есть этот вывод из pdftools pdf_data() для страницы финансовой отчетности города. К сожалению, в редких случаях захват линии y немного сбивается, как показано ниже. Я хотел бы иметь возможность группироваться по y, включая случаи, когда y равно -1.

   library(data.table)
  data <- 
    read.csv(
      text =
     "x, y, textn43, 391, Totaln66, 391, Expendituresn260, 390, 6476803n542, 390, 6773717"
     )
  data <- setDT(data)
  
  # View data
  print(data)
#>      x   y          text
#> 1:  43 391         Total
#> 2:  66 391  Expenditures
#> 3: 260 390       6476803
#> 4: 542 390       6773717
  
  # The problem
  data[, paste(text, collapse = ""), y]
#>      y                  V1
#> 1: 391  Total Expenditures
#> 2: 390     6476803 6773717
 

Желаемый вывод примерно такой, если y <= y 1 и y => y — 1:

 #>       y                  V1
#> 1: c(391, 390)  Total Expenditures 6476803 6773717
 

Большинство попыток группировки по диапазону предполагают создание новых столбцов для hi и low, создание новой переменной cut() для группировки, но я не был уверен, с чего начать это реализовывать. У меня также есть тысячи страниц, где буквы » у » постоянно меняются.

Я обычно использую в data.table, поэтому решение для этого гораздо предпочтительнее.

Создано 2021-05-20 пакетом reprex (v2.0.0)

Комментарии:

1. На самом деле не совсем ясно, к чему вы здесь стремитесь. Не могли бы вы предоставить ожидаемый результат?

2. Я отредактировал, как мог, чтобы лучше объяснить. В принципе, как вы группируете по заданному диапазону значений вокруг сгруппированного целого числа. Если у подобной операции есть название, просто знание этого поможет.

3. Я не уверен, почему вы хотели бы получить такой результат, поэтому трудно экстраполировать то, что вы хотели бы получить, если бы было больше значений y. Должна ли каждая строка просто иметь 2 значения y ? Что делать, если ваши исходные данные имеют 390, 391, 392, 393, то вы возвращаете строку для каждого из c(390, 391), c(391 392) и c(392 393). Кроме того, ваш вывод в V1 содержит текст y=390 после вывода y=391. Это намеренно или всегда должны быть персонажи в первую очередь?

4. Это отсканированные строки pdf-файла, в которых, как представляется, небольшое число имеет слегка различающееся вертикальное выравнивание. Каждая сгруппированная строка должна состоять из фактического значения самого y, y -1 и y 1, поэтому в каждой из них будет 3 возможных значения y. Разница в уровнях y обычно составляет около 12, как и было бы естественно на странице, поэтому существует небольшой риск того, что непреднамеренная строка y окажется в двух группах. Обратный вывод в V1-это ошибка, которую я исправлю.

5. в порядке ли вы V1 в соответствии с порядком x или просто в порядке, в котором он находится, и x это ничто?