项目概述:
我正在使用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
谢谢您的输入!
答案 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