3

.csvR を使用して Amazon S3 バケットからファイルをダウンロードできるようにしたいと考えています。

ここに記載されている API の使用を開始しましたhttp://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html

私はパッケージhttrを使用してリクエストを作成してGETいます。関連するファイルをダウンロードできるようにするための正しいパラメーターを特定する必要があります。

ダウンロードしたいファイルであることがわかっているので、に設定しresponse-content-typeました...しかし、得られる応答は次のとおりです。text/csv.csv

Response [https://s3-zone.amazonaws.com/bucket.name/file.name.csv?response-content-type=text%2Fcsv]
  Status: 200
  Content-type: text/csv
Date and Time,Open,High,Low,Close,Volume
2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64
2007/01/01 22:52:00,5675.00,5676.00,5674.00,5674.00,17
2007/01/01 22:53:00,5674.00,5674.00,5673.00,5674.00,42
2007/01/01 22:54:00,5675.00,5676.00,5674.00,5676.00,36
2007/01/01 22:55:00,5675.00,5676.00,5675.00,5676.00,18
2007/01/01 22:56:00,5676.00,5677.00,5674.00,5677.00,64
2007/01/01 22:57:00,5678.00,5678.00,5677.00,5677.00,45
2007/01/01 22:58:00,5679.00,5680.00,5678.00,5680.00,30
 .../01/01 22:59:00,5679.00,5679.00,5677.00,5678.00,19

data.frameそして、ファイルはダウンロードされず、データは応答にあるようです...データを表す応答で作成された文字列を抽出できます。元のように変換できると思います望ましいですが、データをダウンロードするより良い方法はありますか...GETコマンドから直接read.csv、データを読み取るために使用しますか? これはパラメーターの問題だと思います...ファイルをダウンロードするために設定する必要があるパラメーターがわかりません。

人々が文字列の変換を提案した場合...これは私が持っている文字列の構造です...それをに変換するにはどのようなコマンドを実行する必要がありますdata.frameか?

chr "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n2007/01/01 22:52:00,5675."| __truncated__

ありがとう

HLM

4

2 に答える 2

3

2番目の質問への答え:

> chr <- "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n"
> read.csv(text=chr)
        Date.and.Time Open High  Low Close Volume
1 2007/01/01 22:51:00 5683 5683 5673  5673     64

read.csv の速度をさらに上げたい場合は、次のようにしてください。

chr <- "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n"
 read.csv(text=chr, colClasses=c("POSIXct", rep("numeric", 5) ) )

URL が適切に設定されていると仮定すると (そして、これをテストするものはまだ何もありません)、GET( ...)$content

多分:

infile <- read.csv(text=GET(...)$content, colClasses=c("POSIXct", rep("numeric", 5) ) )

編集:

データが「未加工」の形式で表示されるため、これは正しくありません。テキストとしてエンコードされる前に、raw から変換する必要があります。私は Nabble を簡単に検索して (結局のところ何かに役立つはずです)、Web 上に存在する csv ファイルを見つけました。これが最終的に機能したものです:

read.csv(text=rawToChar( 
                 GET(
                  "http://nseindia.com/content/equities/scripvol/datafiles/16-11-2012-TO-16-11-2012ACCEQN.csv"
                   )[["content"]] ) )
  Symbol Series        Date Prev.Close Open.Price High.Price Low.Price Last.Price Close.Price
1    ACC     EQ 16-Nov-2012     1404.4    1410.95    1410.95   1369.45    1374.95      1378.1
  Average.Price Total.Traded.Quantity Turnover.in.Lacs Deliverable.Qty X..Dly.Qt.to.Traded.Qty
1       1393.62                132921          1852.41           56899                   42.81
于 2012-11-30T02:14:37.273 に答える
2

1 つの方法を次に示します。

library(taRifx) # for stack.list
test <- "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n"
stack( sapply( strsplit( test, "\\n" )[[1]], strsplit, split="," ) )

    [,1]                  [,2]      [,3]      [,4]      [,5]      [,6]      
ret "Date and Time"       "Open"    "High"    "Low"     "Close"   "Volume\r"
new "2007/01/01 22:51:00" "5683.00" "5683.00" "5673.00" "5673.00" "64\r"    
new "2007/01/01 22:51:00" "5683.00" "5683.00" "5673.00" "5673.00" "64\r"    

次に、data.frame に変換します。

testdat <- stack( sapply( strsplit( test, "\\n" )[[1]], strsplit, split="," ) )
rownames(testdat) <- seq(nrow(testdat)) # Because duplicate rownames aren't allowed in data.frames
colnames(testdat) <- testdat[1,]
testdat <- testdat[-1,]
as.data.frame(testdat)
        Date and Time    Open    High     Low   Close Volume\r
2 2007/01/01 22:51:00 5683.00 5683.00 5673.00 5673.00     64\r
3 2007/01/01 22:51:00 5683.00 5683.00 5673.00 5673.00     64\r
于 2012-11-30T01:58:22.600 に答える