将数据从pdf文件导入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")

鉴于此,我想知道是否有一种方法(使用任何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")
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上更易于安装的替代方案的更新