doc <- xmlParse('EURUSD.xml')
docll <- xmlToList(doc)$Worksheet$Table
## https://stackoverflow.com/questions/16300344/how-to-flatten-a-list-of-lists-in-r
docllt <- do.call(c, unlist(docll, recursive = FALSE))
doctbl <- ldply(docllt, data.frame) %>% tbl_df %>% .$text
doctbl <- matrix(na.omit(unlist(doctbl)), nc = 12, byrow = TRUE) %>% tbl_df
names(doctbl) <- doctbl[1,]
doctbl <- doctbl[-1,]
doctbl %<>% data.frame %>% tbl_df %>%
mutate(Date = as.POSIXct(strptime(str_replace_all(Date, 'T', ' '),
'%Y-%m-%d %H:%M:%S')),
EUR.USD.Open..Ask. = as.numeric(EUR.USD.Open..Ask.),
EUR.USD.High..Ask. = as.numeric(EUR.USD.High..Ask.),
EUR.USD.Low..Ask. = as.numeric(EUR.USD.Low..Ask.),
EUR.USD.Close..Ask. = as.numeric(EUR.USD.Close..Ask.),
EUR.USD.Open..Bid.. = as.numeric(EUR.USD.Open..Bid..),
EUR.USD.High..Bid.. = as.numeric(EUR.USD.High..Bid..),
EUR.USD.Low..Bid.. = as.numeric(EUR.USD.Low..Bid..),
EUR.USD.Close..Bid.. = as.numeric(EUR.USD.Close..Bid..),
MVA.EUR.USD.Open.7. = as.numeric(MVA.EUR.USD.Open.7.),
Transactions = as.numeric(Transactions),
Real.Volume = as.numeric(Real.Volume))
> doctbl
# A tibble: 1,745 x 12
Date EUR.USD.Open..Ask. EUR.USD.High..Ask. EUR.USD.Low..Ask.
<dttm> <dbl> <dbl> <dbl>
1 2017-10-18 05:15:00 1.17320 1.17358 1.17316
2 2017-10-18 05:10:00 1.17376 1.17389 1.17307
3 2017-10-18 05:05:00 1.17421 1.17449 1.17320
4 2017-10-18 05:00:00 1.17462 1.17471 1.17406
5 2017-10-18 04:55:00 1.17476 1.17499 1.17446
6 2017-10-18 04:50:00 1.17483 1.17506 1.17470
7 2017-10-18 04:45:00 1.17458 1.17491 1.17446
8 2017-10-18 04:40:00 1.17531 1.17535 1.17456
9 2017-10-18 04:35:00 1.17586 1.17602 1.17524
10 2017-10-18 04:30:00 1.17592 1.17603 1.17564
# ... with 1,735 more rows, and 8 more variables: EUR.USD.Close..Ask. <dbl>,
# EUR.USD.Open..Bid.. <dbl>, EUR.USD.High..Bid.. <dbl>, EUR.USD.Low..Bid.. <dbl>,
# EUR.USD.Close..Bid.. <dbl>, MVA.EUR.USD.Open.7. <dbl>, Transactions <dbl>,
# Real.Volume <dbl>
然而写成shiny app 却无法读取文件...
output$contents <- renderTable({
# input$file1 will be NULL initially. After the user selects
# and uploads a file, head of that data file by default,
# or all rows if selected, will be shown.
if (is.null(input$file1))
return(NULL)
doc <- xmlParse(input$file1)
docll <- xmlToList(doc)$Worksheet$Table
## https://stackoverflow.com/questions/16300344/how-to-flatten-a-list-of-lists-in-r
docllt <- do.call(c, unlist(docll, recursive = FALSE))
doctbl <- ldply(docllt, data.frame) %>% tbl_df %>% .$text
doctbl <- matrix(na.omit(unlist(doctbl)), nc = 12, byrow = TRUE) %>% tbl_df
names(doctbl) <- doctbl[1,]
doctbl <- doctbl[-1,]
doctbl %<>% data.frame %>% tbl_df %>%
mutate(Date = as.POSIXct(strptime(str_replace_all(Date, 'T', ' '),
'%Y-%m-%d %H:%M:%S')),
EUR.USD.Open..Ask. = as.numeric(EUR.USD.Open..Ask.),
EUR.USD.High..Ask. = as.numeric(EUR.USD.High..Ask.),
EUR.USD.Low..Ask. = as.numeric(EUR.USD.Low..Ask.),
EUR.USD.Close..Ask. = as.numeric(EUR.USD.Close..Ask.),
EUR.USD.Open..Bid.. = as.numeric(EUR.USD.Open..Bid..),
EUR.USD.High..Bid.. = as.numeric(EUR.USD.High..Bid..),
EUR.USD.Low..Bid.. = as.numeric(EUR.USD.Low..Bid..),
EUR.USD.Close..Bid.. = as.numeric(EUR.USD.Close..Bid..),
MVA.EUR.USD.Open.7. = as.numeric(MVA.EUR.USD.Open.7.),
Transactions = as.numeric(Transactions),
Real.Volume = as.numeric(Real.Volume))
return(doctbl)
})
参考文献:
1. Uploading Files