2017-06-08 17 views
0

WebからダウンロードしたデータをXTSに変換して整理しようとしています。 GREPLを使用してデータをクリーンアップするCRANに関するいくつかのドキュメントを見つけましたが、GREPLを使用する以外にこれを行う簡単な方法があるかどうか疑問に思っています。誰かがGREPLやRの別の機能を使ってこのデータを整理するためのコードを手伝ってくれることを願っていました。私に提供できる援助を前もってありがとう。Rのデータを消去してXTSに変換する最も良い方法

[1] "{"                     
    [2] " \"Meta Data\": {"                
    [3] "  \"1. Information\": \"Daily Prices (open, high, low, close) and Volumes\"," 
    [4] "  \"2. Symbol\": \"MSFT\","             
    [5] "  \"3. Last Refreshed\": \"2017-06-08 15:15:00\","       
    [6] "  \"4. Output Size\": \"Compact\","           
    [7] "  \"5. Time Zone\": \"US/Eastern\""  
    [8] "  },"                   
    [9] "  \"2017-01-19\": {"               
[10] "   \"1. open\": \"62.2400\","            
[11] "   \"2. high\": \"62.9800\","            
[12] "   \"3. low\": \"62.1950\","            
[13] "   \"4. close\": \"62.3000\","            
[14] "   \"5. volume\": \"18451655\""           
[15] "  },"                   
[16] "  \"2017-01-18\": {"               
[17] "   \"1. open\": \"62.6700\","            
[18] "   \"2. high\": \"62.7000\","            
[19] "   \"3. low\": \"62.1200\","            
[20] "   \"4. close\": \"62.5000\","            
[21] "   \"5. volume\": \"19670102\""           
[22] "  },"                   
[23] "  \"2017-01-17\": {"               
[24] "   \"1. open\": \"62.6800\","            
[25] "   \"2. high\": \"62.7000\","            
[26] "   \"3. low\": \"62.0300\","            
[27] "   \"4. close\": \"62.5300\","            
[28] "   \"5. volume\": \"20663983\""           
[29] "  }"                   
[30] " }"                    
[31] "}"         

このデータの最終的な出力は次のようになります。beigel suggestedとして

  Open  High  Low  Close  Volume 
2017-01-17 62.68  62.70  62.03  62.53  20663983 
2017-01-18 62.67  62.70  62.12  62.50  19670102 
2017-01-19 62.24  62.98  62.195  62.30  18451655 
+0

data.frame、tibbleなどに変換することができますまた、希望の出力がどのように表示されるかを示します。 – beigel

+0

@beigelご回答いただきありがとうございます。私はjsonliteを見ていきたいと思います。 – user3734010

答えて

0

、最初にやるべきことはJSONをパースです。

Lines <- 
"{                     
    \"Meta Data\": { 
    \"1. Information\": \"Daily Prices (open, high, low, close) and Volumes\", 
    \"2. Symbol\": \"MSFT\", 
    \"3. Last Refreshed\": \"2017-06-08 15:15:00\", 
    \"4. Output Size\": \"Compact\", 
    \"5. Time Zone\": \"US/Eastern\" 
    }, 
    \"2017-01-19\": { 
     \"1. open\": \"62.2400\", 
     \"2. high\": \"62.9800\", 
     \"3. low\": \"62.1950\", 
     \"4. close\": \"62.3000\", 
     \"5. volume\": \"18451655\" 
    }, 
    \"2017-01-18\": { 
     \"1. open\": \"62.6700\", 
     \"2. high\": \"62.7000\", 
     \"3. low\": \"62.1200\", 
     \"4. close\": \"62.5000\", 
     \"5. volume\": \"19670102\" 
    }, 
    \"2017-01-17\": { 
     \"1. open\": \"62.6800\", 
     \"2. high\": \"62.7000\", 
     \"3. low\": \"62.0300\", 
     \"4. close\": \"62.5300\", 
     \"5. volume\": \"20663983\" 
    } 
}" 
parsedLines <- jsonlite::fromJSON(Lines) 

データが使用可能な構造になったので、データのクリーニングを開始できます。 parsedLinesの各要素は別のリストであることに注意してください。ベクトルをunlistでベクトルに変換しましょう。そうすれば、リストのリストの代わりにベクトルのリストが得られます。

parsedLines <- lapply(parsedLines, unlist) 

今、あなたはparsedLinesの最初の要素は、メタデータであることに気づいたかもしれません。私たちは後でそれを最終オブジェクトにアタッチすることができます。しかし、まず、rbind他のすべての要素を行列にしましょう。 do.callを使用して、任意の長さのリストに対して行うことができます。

ohlcv <- do.call(rbind, parsedLines[-1]) # [-1] removes the first element 

今、私たちは、列名をクリーンアップし、数値に文字のデータを変換することができます。この時点で

colnames(ohlcv) <- gsub("^[[:digit:]]\\.", "", colnames(ohlcv)) 
ohlcv <- type.convert(ohlcv) 

、私は個人的にXTSオブジェクトに変換し、メタデータを添付します。しかし、あなたは、ohlcv行列を続けるあなたがより簡単で操作できるオブジェクトにこれを変換するjsonlite :: fromJSONを使用してに見てみたいことがあります

# convert to xts 
x <- as.xts(ohlcv, dateFormat = "Date") 
# attach attributes 
metadata <- parsedLines[[1]] 
names(metadata) <- gsub("[[:digit:]]|\\.|[[:space:]]", "", names(metadata)) 
xtsAttributes(x) <- metadata 
# view attributes 
str(x) 

An 'xts' object on 2017-01-17/2017-01-19 containing: 
    Data: num [1:3, 1:5] 62.7 62.7 62.2 62.7 62.7 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:5] " open" " high" " low" " close" ... 
    Indexed by objects of class: [Date] TZ: UTC 
    xts Attributes: 
List of 5 
$ Information : chr "Daily Prices (open, high, low, close) and Volumes" 
$ Symbol  : chr "MSFT" 
$ LastRefreshed: chr "2017-06-08 15:15:00" 
$ OutputSize : chr "Compact" 
$ TimeZone  : chr "US/Eastern" 
+0

ありがとう@ジョシュアと@Beigel!私はあなたの時間を本当に感謝し、この質問に助けてください!私はデータを整理することができました、そして、それは今使用可能です! – user3734010

関連する問題