質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.99%

  • JSON

    936questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • R

    249questions

    R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Rを用いたJSON形式テキストからのデータ抽出

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 188

donarudo

score 4

下に示すテキストデータの"relative_humidity"の数値を全て抜き出したいのですがデータの抽出方法がよく分かりません。

コード
[
    {
        "_id": "59c49978c6197e0006ca9b40", 
        "nodeID": 15, 
        "relative_humidity": 93.6, 
        "time": "2017-09-22T14:02:41.000000+09:00"
    }, 
    {
        "_id": "59c49982c6197e0006ca9b47", 
        "nodeID": 15, 
        "soil_moisture_content": 23.73, 
        "soil_temperature": 22.7, 
        "time": "2017-09-22T14:02:52.000000+09:00"
    }, 
    {
        "_id": "59c49984c6197e0006ca9b49", 
        "air_temperature": 21.9, 
        "nodeID": 15, 
        "time": "2017-09-22T14:02:59.000000+09:00"
    }, 
    {
        "_id": "59c4998ec6197e0006ca9b52", 
        "nodeID": 15, 
        "soil_moisture_content": 23.73, 
        "soil_temperature": 22.7, 
        "time": "2017-09-22T14:03:05.000000+09:00"
    }, 
    {
        "_id": "59c49991c6197e0006ca9b54", 
        "air_temperature": 21.9, 
        "nodeID": 15, 
        "time": "2017-09-22T14:03:12.000000+09:00"
    }, 
    {
        "_id": "59c4999cc6197e0006ca9b5b", 
        "nodeID": 15, 
        "soil_moisture_content": 23.81, 
        "soil_temperature": 22.7, 
        "time": "2017-09-22T14:03:18.000000+09:00"
    }, 
    {
        "ATPR": 500, 
        "_id": "59c4999ec6197e0006ca9b5f", 
        "nodeID": 15, 
        "time": "2017-09-22T14:03:25.000000+09:00"
    }, 
    {
        "_id": "59c499a8c6197e0006ca9b6e", 
        "nodeID": 15, 
        "soil_moisture_content": 23.73, 
        "soil_temperature": 22.7, 
        "time": "2017-09-22T14:03:30.000000+09:00"
    }, 
    {
        "_id": "59c499aac6197e0006ca9b74", 
        "amount_of_solar_radiation": 49, 
        "nodeID": 15, 
        "time": "2017-09-22T14:03:37.000000+09:00"
    }, 
    {
        "_id": "59c499b6c6197e0006ca9b85", 
        "nodeID": 15, 
        "soil_moisture_content": 23.81, 
        "soil_temperature": 22.7, 
        "time": "2017-09-22T14:03:45.000000+09:00"
    }, 
    {
        "_id": "59c499b9c6197e0006ca9b8b", 
        "nodeID": 15, 
        "time": "2017-09-22T14:03:51.000000+09:00", 
        "wind_speed": 1
    }, 
    {
        "_id": "59c499c3c6197e0006ca9b9e", 
        "nodeID": 15, 
        "soil_moisture_content": 23.73, 
        "soil_temperature": 22.7, 
        "time": "2017-09-22T14:03:57.000000+09:00"
    }, 
    {
        "_id": "59c499c5c6197e0006ca9ba2", 
        "nodeID": 15, 
        "time": "2017-09-22T14:04:03.000000+09:00", 
        "wind_direction": "0.0"
    }, 
    {
        "_id": "59c499cfc6197e0006ca9bb3", 
        "nodeID": 15, 
        "soil_moisture_content": 23.73, 
        "soil_temperature": 22.7, 
        "time": "2017-09-22T14:04:09.000000+09:00"
    }, 
    {
        "_id": "59c49bb3c6197e0006ca9d90", 
        "nodeID": 15, 
        "relative_humidity": 94, 
        "time": "2017-09-22T14:12:17.000000+09:00"
    }
] //以下省略しています。

試したこと

library("rjson")
result <- fromJSON(file="hamaguchi.txt")
print(result)
json_data_frame <- as.data.frame(result) //結果をデータフレームに格納
print(json_data_frame)
json_data_frame["relative_humidity"]
output <- unlist(sapply(result, function(x){return(x$relative_humidity)})) //relative_humidityの全ての値を抽出
print(output) 

結果

[1]  93.6  94.0  95.5  96.1  98.9  96.7  96.9  95.7  95.9  96.3
[11]  93.9  94.1  95.2  95.6  96.4  97.0  97.1  96.9  96.8  97.0
//以下省略しています。
とrelative_humidityの全ての値は出力できるのですが、timeも同時に出力したいと考えています。

補足情報(言語/FW/ツール等のバージョンなど)

開発環境はR version 3.4.0 
OSはmacOSです。 
回答の方よろしくお願いします。
分かりにくい箇所がありましたら気軽に質問してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

要は、入れ子のリストをmatrixかdataframeに変換できればいいのだと認識しました。

library("rjson")
jsondata <- fromJSON(file="hamaguchi.txt")
cols <- unique(unlist(sapply(jsondata, names)))
x<-t(sapply(jsondata,
    function(x){
      d<-c() 
      for(col in cols){
        d[col] <- ifelse(is.null(x[[col]]), "", x[[col]])
      }
      return(d)
    }
))


これで、hamaguchi.txtから読み込んだデータが11列15行のmatrixであるオブジェクトxとして出力されます。元データに存在しない値は””として格納されます。

timeとrelative_humidityを出力したければ、たとえば、次のようにすればいいでしょう。

paste( x[,'time'], x[,'relative_humidity'], sep=",")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JSON

    936questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • R

    249questions

    R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。