2015-11-19 1 views
1

У меня есть файл первенствовать, где появляется следующее предупреждающее сообщение, когда я хочу, чтобы открыть его:Как открыть файл excel в R, где формат файла и расширение файла отличаются?

файл, который вы пытаетесь открыть, «name.ext», находится в другом формате, чем указано расширение файла , Убедитесь, что файл не поврежден и находится из надежного источника перед открытием файла. Вы хотите открыть файл сейчас?

Когда я нажимаю да, чтобы открыть его, все в порядке. Тем не менее, я хочу прочитать этот файл в R и не мог управлять тем, что R загружает контент, несмотря на предупреждение. Как я могу это достичь?

Одним из примеров файлов, которые я хочу, чтобы открыть с R можно скачать here. Я использую MS Office 2016.

+0

Поскольку вы можете открыть файл в excel, почему бы не сохранить его в обычном формате excel или в формате csv? –

+0

Вот как я это делаю до сих пор. Тем не менее, я должен часто обновлять файлы, и я не хочу, чтобы всегда открывать и сохранять файлы, прежде чем выполнять дальнейшую обработку с R. Это занимает слишком много времени. –

+0

Вы пробовали 'data.table :: fread()'? – David

ответ

2

Это XML-файл с UTF-16 BOM (знак порядка байтов) в начале. Вы можете прочитать его с R:

library(xml2) 
library(rvest) 

xls <- read_html("LU0444605991_434.xls") 
values <- html_text(html_nodes(xls, xpath="//cell/data")) 
dat <- data.frame(matrix(values[5:length(values)], ncol=2, byrow=TRUE), 
        stringsAsFactors=FALSE) 
colnames(dat) <- c("datum", "nav") 
dat$nav <- as.numeric(dat$nav) 

head(dat) 
##     datum  nav 
## 1 2009-10-05T00:00:00 117.1047 
## 2 2009-10-06T00:00:00 117.0746 
## 3 2009-10-07T00:00:00 117.0915 
## 4 2009-10-08T00:00:00 117.0822 
## 5 2009-10-09T00:00:00 116.8312 
## 6 2009-10-12T00:00:00 116.9347 

Вы можете просто использовать xml2 пакет (и read_xml), если вы действительно хотите, чтобы колотить головой о стену несколько раз, чтобы иметь дело с сумасшедшими пространств имен XML в этих документах Microsoft.

Вам все равно нужно будет преобразовывать дату и время и числовое преобразование.

+0

Это просто здорово. Спасибо! –

+1

Возможно, вам придется настроить код в зависимости от содержимого возвращаемого XLS. Это пропускает строки заголовка/информации. Вы можете сделать что-то вроде 'cat (stringr :: str_wrap (as.character (xls), 80))', чтобы увидеть структуру (отрегулируйте '80' в зависимости от вашего окна просмотра консоли). – hrbrmstr