将数据从pdf文件导入R
鉴于此,我想知道是否有一种方法(使用任何R库)将名为将数据从pdf文件导入R,r,dataframe,csv,import,data-wrangling,R,Dataframe,Csv,Import,Data Wrangling,鉴于此,我想知道是否有一种方法(使用任何R库)将名为SCALE SCORE和FREQ.的两列作为.csv或其他R友好格式导入R?最快的方法是选择数据列(而不是列标题)。在pdf的第4页,从左上角的1038到右下角的100.00。将所选内容复制到剪贴板: dta <- read.table(pipe("pbpaste")) # For Mac Os # For Windows use dta <- read.table("clipboard")
SCALE SCORE
和FREQ.
的两列作为.csv
或其他R友好格式导入R?最快的方法是选择数据列(而不是列标题)。在pdf的第4页,从左上角的1038到右下角的100.00。将所选内容复制到剪贴板:
dta <- read.table(pipe("pbpaste")) # For Mac Os
# For Windows use dta <- read.table("clipboard")
dta <- dta[, 1:2] # Discard the last three columns
colnames(dta) <- c("ScaleScore", "Freq")
head(dta)
# ScaleScore Freq
# 1 1038 142
# 2 1171 15
# 3 1250 78
# 4 1299 269
# 5 1335 840
# 6 1364 1690
dta执行此操作的最快方法是选择数据列(但不是列标题)。在pdf的第4页,从左上角的1038到右下角的100.00。将所选内容复制到剪贴板:
dta <- read.table(pipe("pbpaste")) # For Mac Os
# For Windows use dta <- read.table("clipboard")
dta <- dta[, 1:2] # Discard the last three columns
colnames(dta) <- c("ScaleScore", "Freq")
head(dta)
# ScaleScore Freq
# 1 1038 142
# 2 1171 15
# 3 1250 78
# 4 1299 269
# 5 1335 840
# 6 1364 1690
dta我编写了一个包,可以帮助从PDF中提取文本。它是从头开始写的C++,速度相当快(通常比PDFo刀有点快)。目前,您仍然需要将文本整理到一个表中,就像在pdftools中一样。在您的情况下,它的工作原理如下:
库(dplyr)
图书馆(PDFR)
df%
分组依据(顶部)%>%
排列(左,按组=真)%>%
汇总(text=粘贴(text,collapse=“,”)%%>%
排列(-top)%>%
过滤器(序号(nrow(%)>4)%>%
`[[`(2) %>%
read.csv(text=,header=FALSE,
col.names=c(“频率”、“频率”、“百分比”、“百分比”))
这给了你:
#> freq cum_freq perc cum_perc
#> 1 142 142 0.04 0.04
#> 2 15 157 0.00 0.04
#> 3 78 235 0.02 0.06
#> 4 269 504 0.07 0.13
#> 5 840 1344 0.21 0.34
#> 6 1690 3034 0.42 0.76
#> 7 3254 6288 0.81 1.57
#> 8 5413 11701 1.35 2.92
#> 9 7659 19360 1.91 4.83
#> 10 9696 29056 2.42 7.24
#> 11 11529 40585 2.87 10.12
#> 12 13145 53730 3.28 13.39
#> 13 13830 67560 3.45 16.84
#> 14 14844 82404 3.70 20.54
#> 15 15153 97557 3.78 24.32
#> 16 15120 112677 3.77 28.09
#> 17 15347 128024 3.83 31.92
#> 18 15525 143549 3.87 35.79
#> 19 15710 159259 3.92 39.70
#> 20 15596 174855 3.89 43.59
#> 21 15529 190384 3.87 47.46
#> 22 15451 205835 3.85 51.31
#> 23 15259 221094 3.80 55.12
#> 24 15028 236122 3.75 58.86
#> 25 15147 251269 3.78 62.64
#> 26 14683 265952 3.66 66.30
#> 27 14469 280421 3.61 69.91
#> 28 14229 294650 3.55 73.45
#> 29 13523 308173 3.37 76.82
#> 30 13246 321419 3.30 80.13
#> 31 12987 334406 3.24 83.36
#> 32 12264 346670 3.06 86.42
#> 33 11964 358634 2.98 89.40
#> 34 10841 369475 2.70 92.11
#> 35 9958 379433 2.48 94.59
#> 36 8529 387962 2.13 96.72
#> 37 6729 394691 1.68 98.39
#> 38 4437 399128 1.11 99.50
#> 39 2010 401138 0.50 100.00
虽然这似乎有点复杂,但对于像您这样的PDF来说,这是非常好的,因为每个页面上的表都是相同的。如果您在lappy
循环中运行上述代码,那么它一次可以获得多个页面,比剪切和粘贴要快得多
要安装,您需要devtools:
install.packages("devtools")
devtools::install_github("AllanCameron/PDFR")
编辑
如果存在安装问题,以下是pdftools中的等效项:
install.packages(pdftools)
df%
组别(y)%>%
排列(x,按组=真)%>%
汇总(text=粘贴(text,collapse=“,”)%%>%
排列(y)%>%
`[[`(2) %>%
`[`(3:41) %>%
read.csv(text=,header=FALSE,
col.names=c(“频率”、“频率”、“百分比”、“百分比”))
>P>我已经编写了一个包,可以帮助从PDF中提取文本。它是在C++中从头开始写的,而且速度相当快(通常比PDFoToT快一点)。目前你仍然需要把文本编排到一个表中——就像你在PDFoots中所做的那样。
库(dplyr)
图书馆(PDFR)
df%
分组依据(顶部)%>%
排列(左,按组=真)%>%
汇总(text=粘贴(text,collapse=“,”)%%>%
排列(-top)%>%
过滤器(序号(nrow(%)>4)%>%
`[[`(2) %>%
read.csv(text=,header=FALSE,
col.names=c(“频率”、“频率”、“百分比”、“百分比”))
这给了你:
#> freq cum_freq perc cum_perc
#> 1 142 142 0.04 0.04
#> 2 15 157 0.00 0.04
#> 3 78 235 0.02 0.06
#> 4 269 504 0.07 0.13
#> 5 840 1344 0.21 0.34
#> 6 1690 3034 0.42 0.76
#> 7 3254 6288 0.81 1.57
#> 8 5413 11701 1.35 2.92
#> 9 7659 19360 1.91 4.83
#> 10 9696 29056 2.42 7.24
#> 11 11529 40585 2.87 10.12
#> 12 13145 53730 3.28 13.39
#> 13 13830 67560 3.45 16.84
#> 14 14844 82404 3.70 20.54
#> 15 15153 97557 3.78 24.32
#> 16 15120 112677 3.77 28.09
#> 17 15347 128024 3.83 31.92
#> 18 15525 143549 3.87 35.79
#> 19 15710 159259 3.92 39.70
#> 20 15596 174855 3.89 43.59
#> 21 15529 190384 3.87 47.46
#> 22 15451 205835 3.85 51.31
#> 23 15259 221094 3.80 55.12
#> 24 15028 236122 3.75 58.86
#> 25 15147 251269 3.78 62.64
#> 26 14683 265952 3.66 66.30
#> 27 14469 280421 3.61 69.91
#> 28 14229 294650 3.55 73.45
#> 29 13523 308173 3.37 76.82
#> 30 13246 321419 3.30 80.13
#> 31 12987 334406 3.24 83.36
#> 32 12264 346670 3.06 86.42
#> 33 11964 358634 2.98 89.40
#> 34 10841 369475 2.70 92.11
#> 35 9958 379433 2.48 94.59
#> 36 8529 387962 2.13 96.72
#> 37 6729 394691 1.68 98.39
#> 38 4437 399128 1.11 99.50
#> 39 2010 401138 0.50 100.00
虽然这似乎有点复杂,但对于像您这样的PDF来说,这是非常好的,因为每个页面上的表都是相同的。如果您在lappy
循环中运行上述代码,那么它一次可以获得多个页面,比剪切和粘贴要快得多
要安装,您需要devtools:
install.packages("devtools")
devtools::install_github("AllanCameron/PDFR")
编辑
如果存在安装问题,以下是pdftools中的等效项:
install.packages(pdftools)
df%
组别(y)%>%
排列(x,按组=真)%>%
汇总(text=粘贴(text,collapse=“,”)%%>%
排列(y)%>%
`[[`(2) %>%
`[`(3:41) %>%
read.csv(text=,header=FALSE,
col.names=c(“频率”、“频率”、“百分比”、“百分比”))
@Reza我没有什么苛刻的地方,基本上是引用了SO的官方文件::“关注你所面临的实际问题。包括你尝试过的细节和你正在尝试做的事情。[…]展示你的工作!”.干杯。@Reza我没有什么苛刻的地方,基本上是引用了SO的官方文件::“关注你所面临的实际问题。包括你所尝试的细节以及你正在尝试做的事情。[…]展示你的工作!”.Cheers。请尝试使用R脚本编辑器或记事本粘贴到文本文件中,以确保剪贴板中有数据。如果没有,请尝试再次复制。当然,但当我复制该内容并粘贴到记事本文件时,read.table(“剪贴板”)
为我提供了一列,所有内容都网格在一起?您可以使用x将单个向量包装到文本文件中,使用R脚本编辑器或记事本尝试粘贴到文本文件中,以确保剪贴板中有数据。如果没有,请尝试再次复制。当然,但当我复制该内容并粘贴到记事本文件上时,read.table(“剪贴板”)
给了我一个列,所有的东西都在一起了?你可以用x来包装单个向量,谢谢你分享你的包。我一直在尝试tabulizer
,但是bleh,rJava
@IanCampbell谢谢-这是一项正在进行的工作。它擅长于提取文本并将其分组为单词和段落。我还没有想出一个c不过,请考虑一下它,看看它。看看,我遇到了很多问题,甚至试图安装你的包。@ MurouZIN看到我的更新的替代,这是在CRANS,更易于安装感谢分享您的包。我一直在尝试<代码>制表器< /代码>,但是BLH,< COD。EJ> RJava。IcANAMBELL谢谢——这是一项正在进行中的工作。它很好地提取文本并分组成单词和段落。但我还没有找到一种一致的方法来重构表。请考虑分叉并看一看。谢谢,我遇到了很多问题,甚至试图安装你的包。我对CRAN上更易于安装的替代方案的更新