R переместить / сдвинуть значения в другой столбец в пределах - PullRequest
2 голосов
/ 07 марта 2019

Обзор проекта:

Я работаю над проектом извлечения документов, использующим библиотеку docxtractr для извлечения таблиц слов из нескольких файлов и превращения их во фрейм данных.Ниже приведен код для конкретной таблицы, 6-й таблицы.

Из-за нескольких файлов я использую lapply для итерации каждого из них и выполнения задач манипуляции с фреймами данных.Причина, по которой во фрейме данных есть дополнительный столбец, заключается в том, что в таблице Word есть скрытые значения для расчетов.Эти таблицы раньше были связаны с большим и сложным файлом макроса Excel.

Мой код

  library("docxtractr")
  sourcesSummary <- lapply(files, function(x){
   doc <- read_docx(x)
   kingsTbls <- docx_extract_all_tbls(doc)
   sources <- docx_extract_tbl(doc, 6, header = FALSE)
   sources <- data.frame(sources)
   # The below two lines are the issue #
   sources[9,3:4] <- sources[9,2:3]
   sources[24,3:4] <- sources[24,2:3]
   })

`

Данные по умолчаниюКадр

                          V1         V2            V3       V4
1           SOURCES OF FUNDS     AMOUNT      PER UNIT     <NA>
2            Proposed A Loan         87 $7,208,000.00  $82,851
3            Proposed B Loan                    $0.00    $   0
4            Investor Equity            $1,948,362.00  $22,395
5   Operating Partner Equity                    $0.00    $   0
6                      Other                    $0.00    $   0
7                      Other                    $0.00    $   0
8                      Other                    $0.00    $   0
9      TOTAL SOURCE OF FUNDS $9,156,362      $105,246     <NA>
10                                 <NA>          <NA>     <NA>
11             USES OF FUNDS     AMOUNT      PER UNIT     <NA>
12      Existing Mortgage(s)                       $0    $   0
13            Purchase Price               $9,011,000 $103,575
14          Origination Fees                  $54,060    $ 621
15        FM application Fee                   $7,208    $  83
16             Investor Fees                    $0.00    $   0
17             Closing Costs                    $0.00    $   0
18 Other (Yield Maintenance)                       $0    $   0
19      Capital Improvements               $39,650.00    $ 456
20            Processing Fee                $3,000.00    $  34
21               Third Party               $11,000.00    $ 126
22                     Legal               $12,500.00    $ 144
23    Repair Escrow (Funded)                    $0.00    $   0
24        TOTAL USE OF FUNDS $9,138,418      $105,039     <NA>
25                                 <NA>          <NA>     <NA>
26        CASH OUT/(CASH IN)        132       $17,944    $ 207

Проблема:

Проблема, которая возникает у меня, связана с перемещением / сдвигом значений в кадре данных.Я успешно сделал это в консоли, однако, когда я запускаю тот же код в lapply , он не выполняется должным образом.

Я пытаюсь сместить значения в строках 9 и 24 вправо на один столбец.Внутри консоли для определенной тестовой переменной приведенный ниже код работает нормально, однако это не так, когда я запускаю lapply по всем моим файлам.

Код проблемы

   sources[9,3:4] <- sources[9,2:3]
   sources[24,3:4] <- sources[24,2:3]

Я также пытался использовать drop = FALSE в скобках, но это тоже не работает.

Токовый выход с lapply

           V2       V3
24 $9,138,418 $105,039

Требуемый выход

Обратите внимание, что строки 9 и 24 изменились.Когда я запускаю свой код в консоли в определенном фрейме данных, это - результат, опять же, проблема в том, что проблема возникает.После этого я собираюсь удалить также 2-й столбец и строки NA.

                          V1         V2            V3       V4
1           SOURCES OF FUNDS     AMOUNT      PER UNIT     <NA>
2            Proposed A Loan         87 $7,208,000.00  $82,851
3            Proposed B Loan                    $0.00    $   0
4            Investor Equity            $1,948,362.00  $22,395
5   Operating Partner Equity                    $0.00    $   0
6                      Other                    $0.00    $   0
7                      Other                    $0.00    $   0
8                      Other                    $0.00    $   0
9      TOTAL SOURCE OF FUNDS               $9,156,362 $105,246
10                                 <NA>          <NA>     <NA>
11             USES OF FUNDS     AMOUNT      PER UNIT     <NA>
12      Existing Mortgage(s)                       $0    $   0
13            Purchase Price               $9,011,000 $103,575
14          Origination Fees                  $54,060    $ 621
15        FM application Fee                   $7,208    $  83
16             Investor Fees                    $0.00    $   0
17             Closing Costs                    $0.00    $   0
18 Other (Yield Maintenance)                       $0    $   0
19      Capital Improvements               $39,650.00    $ 456
20            Processing Fee                $3,000.00    $  34
21               Third Party               $11,000.00    $ 126
22                     Legal               $12,500.00    $ 144
23    Repair Escrow (Funded)                    $0.00    $   0
24        TOTAL USE OF FUNDS               $9,138,418 $105,039
25                                 <NA>          <NA>     <NA>
26        CASH OUT/(CASH IN)        132       $17,944    $ 207

Заранее благодарен за ваш вклад!

1 Ответ

1 голос
/ 07 марта 2019

Последнее выражение, оцененное функцией, возвращается функцией.В вашем случае это sources[24,3:4] <- sources[24,2:3], поэтому вы просто получаете

           V2       V3
24 $9,138,418 $105,039

. Решение состоит в том, чтобы либо явно вернуть sources, добавив return(sources) в конце вашей функции, либо простодобавить sources.Итак, ваш код должен выглядеть так:

library("docxtractr")
sourcesSummary <- lapply(files, function(x){
   doc <- read_docx(x)
   kingsTbls <- docx_extract_all_tbls(doc)
   sources <- docx_extract_tbl(doc, 6, header = FALSE)
   sources <- data.frame(sources)
   # The below two lines are the issue #
   sources[9,3:4] <- sources[9,2:3]
   sources[24,3:4] <- sources[24,2:3]
   sources #<- New code!
   })
...