R将值移动/移位到lapply中的其他列

时间:2019-03-07 15:04:26

标签: r dataframe data-manipulation

项目概述:

我正在使用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,但这也不起作用。

当前输出不正确

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

所需的输出

请注意,第9和24行已更改。当我在控制台上的特定数据帧上运行代码时,这是产生的结果,再次出现问题似乎是问题所在。然后,我还要删除第二列和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 个答案:

答案 0 :(得分:1)

该函数返回的最后一个表达式由该函数返回。就您而言,这就是<?xml version="1.0" encoding="UTF-8"?> <company> <staff id="100"> <firstname>Tom</firstname> <lastname>Jerry</lastname> <nickname>Tomy</nickname> <salary>100000</salary> </staff> <staff id="200"> <firstname>Micky</firstname> <lastname>Mouse</lastname> <nickname>Mike</nickname> <salary>200000</salary> </staff> </company>,这就是为什么您会得到

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

解决方案是通过在函数末尾添加 V2 V3 24 $9,138,418 $105,039 来显式返回sources,或者仅添加return(sources)。因此,您的代码应如下所示:

sources