我在将文件导入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是。
答案 0 :(得分:2)
这对我有用
library(gdata)
dat1 <- read.xls("1992.xls")
如果您使用的是32位Windows,这也可以使用:
require(RODBC)
dat1 <- odbcConnectExcel("1992.xls")
对于依赖基于rJava
的广告资源(例如xlsx
)的其他几个选项,您可以查看此link。
正如评论中提到的那样,将文件保存为.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通常也是最快的方法(尽管这只是大数据的问题)。
答案 1 :(得分:2)
为什么要把数据输入和输出.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年到现在或类似的事情,这种程序化方法将为您节省大量时间,而不是处理一堆平面文件。