首页 > 解决方案 > 是否有比 R 中的“extract_table”函数更整洁的方法?

问题描述

我的最终目标是用整洁(干净)的框架来整理桌子。

这是我捕获原始pdf页面的图像文件。(对不起语言,因为我现在要离开韩国了)

pdf 捕获图像

当我在 R 包“tabulizer”中使用“extract_table”函数时,结果是这样的

library(tabulizer)
setwd("C:/Users/user/Desktop/신규펀드/폴더/20200420/투자설명서")
pdf_file <- "K55101D20742_투자설명서_한국투자미국배당귀족증권자투자신탁UH(주식)_(20200322).pdf"
cle <- extract_tables(pdf_file,pages=47,method="stream", encoding="UTF-8")

cle

R 结果捕获

如您所见,没有整洁或干净的框架。因为有很多“”,而且功能分割并用线条制作框架!所以每一行都是分开的。我的意思是,如果您看到 [11,] [12,] [13,] 行,在 pdf 文件中它应该只是包含 (수수료선취-오프라인(A), 0.3500, 0.5100, 0.0300, 0.0100 , 0.9000, -, 0.9000, 1.8500, 0.9000)。然而,在 R 结果中,它被分成三行 [11,] [12,] [13,]。

所以我想解决这个问题,并使结果与 pdf 文件完全相同。

如果你知道任何关于它的答案,请留下任何回复来帮助我。

另外,捕获的图像中没有提到的另一个问题是

如果包中有误读,则合并列或行。例如表中的第一个和第二个数字0.3500,0.5100应该是分开的。但是有时它只合并在一列中,0.35000.5100,就像那样。

我该如何解决?

感谢您的阅读。

++

dput(cle)
list(structure(c("수수료미징구-온라인-개인연금 (C-Pe)", "수수료미징구-오프라인-퇴직연금 (C-R)", 
"수수료미징구-온라인-퇴직연금 (C-Re)", "수수료미징구-오프라인,직판-랩 (C-W)", 
"", "수수료후취-온라인슈퍼 (S)", "", "수수료미징구-온라인슈퍼-개인연금 (S-P)", 
"수수료미징구-온라인슈퍼-퇴직연금 (S-R)", "부과기준", "없음", 
"없음", "없음", "없음", "", "없음", "", "없음", "없음", "매입시", 
"없음", "없음", "없음", "없음", "3 년 미만 환매시", "환매금액의 0.15%", 
"이내", "없음", "없음", "환매시", "없음", "없음", "없음", "없음", 
"", "없음", "", "없음", "없음", "환매시"), .Dim = c(10L, 4L)), 
    structure(c("※ 이 투자신탁이 투자하는 모투자신탁의 수수료 현황", 
    "■ 한국투자 미국배당귀족 증권 모투자신탁(USD)(주식)", "구 분 부과비율 (또는 부과금액)", 
    "선취판매수수료 -", "후취판매수수료 -", "환매수수료 -", "", 
    "", "부과시기", "매입시", "환매시", "환매시"), .Dim = c(6L, 
    2L)), structure(c("", "", "", "", "구분", "", "", "", "", 
    "", "수수료선취", "-오프라인", "(A)", "수수료선취", "-온라인", 
    "(A-e)", "수수료선취", "", "-오프라인-", "", "", "집합", 
    "", "투자", "", "업자", "", "보수", "", "", "0.3500", "", 
    "", "0.3500", "", "", "0.3500", "", "", "", "", "판매", "", 
    "회사", "", "보수", "", "", "", "0.5100", "", "", "0.2550", 
    "", "", "0.3570", "", "", "", "", "신탁", "", "업자", "", 
    "보수", "", "", "", "0.0300", "", "", "0.0300", "", "", "0.0300", 
    "", "", "일반", "", "사무", "", "관리", "", "회사", "", "보수", 
    "", "0.0100", "", "", "0.0100", "", "", "0.0100", "", "부과비율 (연간, %)", 
    "", "", "", "기타", "총보수", "비용", "", "", "", "", "0.9000 -", 
    "", "", "0.6450 -", "", "", "0.7470 -", "", "", "", "", "", 
    "총보수", "", "<U+30FB>비용", "", "", "", "", "0.9000", "", 
    "", "0.6450", "", "", "0.7470", "", "", "", "(동종", "", 
    "유형총", "", "보수<U+30FB>", "", "비용)", "", "", "1.8500", 
    "", "", "1.3900", "", "", "-", "", "", "", "", "합성총", 
    "", "보수<U+30FB>", "", "비용", "", "", "", "0.9000", "", 
    "", "0.6450", "", "", "0.7470", "", "", "", "", "증권", "", 
    "거래", "", "비용", "", "", "", "-", "", "", "-", "", "", 
    "-", ""), .Dim = c(19L, 10L)))
> 

标签: rtabulizer

解决方案


更新:

df<- as.data.frame(cle[[3]])
df<- noquote(df)

library(assertr)

header<-col_concat(df[1,])
r1<-col_concat(t(df[2:10,]))
r2<-col_concat(t(df[11:13,]))
r3<-col_concat(t(df[14:16,]))
r4<-col_concat(t(df[17:19,]))

newdf<- rbind(r1,r2,r3,r4)

colnames(newdf)<- newdf[1,]
newdf<- newdf[-1,]
View(newdf)

由于第 6 列和第 7 列的值在 cle 文件中合并,它给 ooutput 表将少一列。

输出表视图 在此处输入图像描述

我手动插入第 7 列,代码如下:

df<- as.data.frame(cle[[3]])
df<- noquote(df)
df$V6.1<- c("",rep("", nrow(df)-1))
df<- df[c(1:6,11,7:10)]
colnames(df)<- c("V1","V2","V3","V4","V5","V6","V7","V8","V9","V10","V11")
df$V7[7]<- paste(df$V6[7])
df$V6[7]<-""
library(assertr)

header<-col_concat(df[1,])
r1<-col_concat(t(df[2:10,]))
r2<-col_concat(t(df[11:13,]))
r3<-col_concat(t(df[14:16,]))
r4<-col_concat(t(df[17:19,]))

newdf<- rbind(r1,r2,r3,r4)

colnames(newdf)<- newdf[1,]
newdf<- newdf[-1,]
newdf<- as.data.frame(newdf)
newdf[7]<-"-"
View(newdf)

这导致了下表:

在此处输入图像描述

我认为你可以解决这个问题。


推荐阅读