【问题标题】:Can't import this excel file into R无法将此 excel 文件导入 R
【发布时间】:2017-01-31 05:32:15
【问题描述】:

我在将文件导入 R 时遇到问题。该文件是从以下网站获得的:https://report.nih.gov/award/index.cfm,我在该网站上单击“导入表”并下载了 1992 年的 .xls 文件。

这张图片可能有助于描述我如何检索数据

这是我尝试在控制台中输入的内容以及结果:

输入:

> library('readxl')
> data1992 <- read_excel("1992.xls")

输出:

Not an excel file
Error in eval(substitute(expr), envir, enclos) : 
  Failed to open /home/chrx/Documents/NIH Funding Awards, 1992 - 2016/1992.xls

输入:

> data1992 <- read.csv ("1992.xls", sep ="\t")

输出:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  more columns than column names

我不确定这是否相关,但我使用的是 GalliumOS (linux)。因为我使用的是 Linux,所以我的计算机上没有安装 Excel。 LibreOffice 是。

【问题讨论】:

  • 我认为您需要提供更多关于如何获取必要的 Excel 文件以重现此内容的信息。如果我只是单击那个链接并输入 1992 年,结果就是一个项目列表。我看不到任何地方可以下载 Excel 文件。是组织列表中的导出表选项吗?
  • 没问题,给我一秒钟。
  • 好的,我上传了一张截图,并添加了文字来描述我所做的事情。
  • 这只是 excel 文件中一些混乱的元数据。如果您在 MS Excel 中打开它,请忽略有关文件类型的警告,然后重新保存为 xls,然后正常读取。
  • 有时将.xls文件转换为.csv并使用read.csv将CSV文件读入R会更容易

标签: r excel file import format


【解决方案1】:

如果 .csv 就在网页上供您抓取,为什么还要费心将数据输入和输出?

# note the query parameters in the url when you apply a filter, e.g. fy=
url <- 'http://report.nih.gov/award/index.cfm?fy=1992'

library('rvest')
library('magrittr')
library('dplyr')
df <- url %>%
        read_html() %>%
        html_nodes(xpath='//*[@id="orgtable"]') %>%
        html_table()%>% 
        extract2(1) %>%
        mutate(Funding = as.numeric(gsub('[^0-9.]','',Funding)))

head(df)

返回

                              Organization          City State       Country Awards Funding
1 A.T. STILL UNIVERSITY OF HEALTH SCIENCES    KIRKSVILLE    MO UNITED STATES      3  356221
2                     AAC ASSOCIATES, INC.        VIENNA    VA UNITED STATES     10 1097158
3       AARON DIAMOND AIDS RESEARCH CENTER      NEW YORK    NY UNITED STATES      3  629946
4                      ABBOTT LABORATORIES NORTH CHICAGO    IL UNITED STATES      4 1757241
5                            ABIOMED, INC.       DANVERS    MA UNITED STATES      6 2161146
6                     ABRATECH CORPORATION     SAUSALITO    CA UNITED STATES      1  450411

如果您需要循环到 1992 年到现在,或类似的东西,与处理一堆平面文件相比,这种编程方法将为您节省大量时间。

【讨论】:

  • 谢谢,@Caffeine。我没有抓取网页的原因是因为我对 R 很陌生,所以甚至没有想到它。不过,您的解决方案似乎很棒。我肯定要阅读更多关于您正在使用的软件包的信息。
  • @GeorgeTye 不客气——如果 Hack-R 或我回答了你的问题,请单击复选标记接受(两个答案都有效,所以我不介意你接受另一个)
【解决方案2】:

这对我有用

library(gdata)
dat1 <- read.xls("1992.xls")

如果您使用的是 32 位 Windows,这也可以:

require(RODBC)
dat1 <- odbcConnectExcel("1992.xls")

要了解更多依赖于基于rJava 的软件包的选项,例如xlsx,您可以查看此link

正如 cmets 中提到的那样,将文件另存为 .csv 并以这种方式读取也很容易。这将为您省去处理奇怪格式或元数据对导入文件的影响的麻烦:

dat1 <- read.csv("1992.csv")

head(dat1)
                              ORGANIZATION          CITY STATE       COUNTRY AWARDS     FUNDING
1 A.T. STILL UNIVERSITY OF HEALTH SCIENCES    KIRKSVILLE    MO UNITED STATES      3   $356,221 
2                     AAC ASSOCIATES, INC.        VIENNA    VA UNITED STATES     10 $1,097,158 
3       AARON DIAMOND AIDS RESEARCH CENTER      NEW YORK    NY UNITED STATES      3   $629,946 
4                      ABBOTT LABORATORIES NORTH CHICAGO    IL UNITED STATES      4 $1,757,241 
5                            ABIOMED, INC.       DANVERS    MA UNITED STATES      6 $2,161,146 
6                     ABRATECH CORPORATION     SAUSALITO    CA UNITED STATES      1   $450,411

在我看来,转换为 .csv 通常也是最快的方式(尽管这只是大数据的问题)。

【讨论】:

    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 2021-01-02
    • 2021-07-19
    • 1970-01-01
    • 2019-03-06
    • 2016-06-11
    • 2017-02-12
    • 2020-02-05
    相关资源
    最近更新 更多