Rで栄養計算(2)

「FoodCompositionJapan」パッケージで日本食品標準成分表を利用する方法をまとめています。

日本食品標準成分表を利用する

日本食品標準成分表のデータを利用するための関数を紹介していきます。

栄養素名を取得する

栄養素名の取得には、getNutrientNames()関数を用います。


          ## 栄養素名を取得する
          日本食品標準成分表から栄養素名を取得します。
          ```{r}
          nutrient_names = getNutrientNames()
          head(nutrient_names)
          ```
        

nutrient_namesには、63の栄養素項目が付値されます。上記コードでは、下記の通り、最初の6つが表示されます。


          > head(nutrient_names)
          [1] "Refuse (%)"
          [2] "Energy (kcal)"
          [3] "Energy (kJ)"
          [4] "Water (g)"
          [5] "Protein, calculated from reference nitrogen (g)"
          [6] "Protein, calculated as the sum of amino acid residues (g)"
        

食品群一覧を取得する

食品群一覧の取得には、getFoodGroups()関数を用います。


        ## 食品群一覧を取得する
        日本食品標準成分表から食品群一覧を取得します。
        ```{r}
        food_groups = getFoodGroups()
        head(food_groups)
        ```
        

food_groupsには、18の食品群が付置され、上記コードで最初の6つが表示されます。


          > head(food_groups)
          [1] "1 Cereals" "2 Potatoes and starches" "3 Sugars and sweeteners"
          [4] "4 Pulses" "5 Nuts and seeds" "6 Vegetables"
        

食品を検索する

食品を検索するには、findFood()関数を用います。


          ## 食品を検索する
          日本食品標準成分表から食品を検索する。
          ```{r}
          ret01 = findFood(
           keyword = "oil",
           food_group = "14 Fats and oils"
          )
          ```
        
  • keyword: 検索したい食品名を指定する引数で、部分一致で検索されます。
  • food_group: 検索先の食品群を指定します。指定がない場合は、すべての食品群から検索します。

food_groupの指定には、トラブルを避けるため、下記のようにgetFoodGroups()関数を利用した方が良いでしょう。


          ```{r}
          ret01 = findFood(
           keyword = "oil",
           food_group = getFoodGroups()[14]
          )
          ```
        

          > head(names(ret01))
          [1] "food_group" "item_no" "index_no"
          [4] "food_and_description" "Refuse (%)" "Energy (kcal)"
        

検索した結果は、データテーブル形式とデータフレーム形式になっています。食品名は、food_and_descriptionに格納されているようです。上記コードでは、格納されている変数のうち、最初の6つだけを表示していますが、「names(結果を格納した変数名)」で、全ての変数名が表示されます。

栄養素量の多い食品を抽出する

栄養素量の多い食品を抽出するには、subsetFoodRichIn()関数を用います。


            ## 栄養素量の多い食品を抽出する
            栄養素量の多い食品を抽出する方法です。
            ```{r}
            subset_drink = subsetFoodRichIn(
             nutrient_name = 'Carbohydrate, total, calculated by difference (g)',
             food_group = "16 Beverages",
             n = 10
            )
            ```
          
  • nutrient_name: 栄養素名を指定します。
  • food_group: 検索したい食品群を指定します。指定がなければ、すべての食品群から検索します。
  • n: 取得したい食品の数を整数で指定します。

nutrient_nameの指定には、getNutrientNames()関数を、food_groupの指定には、getFoodGroups()関数を用いた方が無難に思えます。


          ```{r}
            subset_drink = subsetFoodRichIn(
             nutrient_name = getNutrientNames()[13],
             food_group = getFoodGroups()[16],
             n = 10
            )
          ```
          

            > subset_drink$food_and_description
            [1] "Cocoa, chocolate milk powder"
            [2] "Kale juice, powder"
            [3] "Coffee, instant coffee, granules"
            [4] "Fermented tea, black tea, tea"
            [5] "Compound alcoholic beverage, \"Shiro0zake\" white Sake0like liquor made from steamed rice, rice koji and \"Shochu\""
            [6] "Green tea, \"Sencha\" common grade tea, tea"
            [7] "Green tea, \"Gyokuro\" high grade tea made from shade0grown leaves, tea"
            [8] "Compound alcoholic beverage, \"Mirin\" sweet liquor made from rice, rice koji and Shochu or distilled alcohol, regular"
            [9] "Cocoa, pure powder"
            [10] "\"Kobu0cha\" kombu powder for drink"
          

            > subset_drink$`Carbohydrate, total, calculated by difference (g)`
            [1] 80.4 70.2 56.5 51.7 48.1 47.7 43.9 43.2 42.4 42.3
          

取得したものは、やはりデータフレーム(データテーブル)形式なので、上記のように呼び出すことができます。 ただし、変数名に空白が含まれているものは、「`(バッククオート)」で変数名を囲む必要があります。 バッククオートは普通のキーボードであれば、「Shift + @」で入力可能です。

表示したい変数だけ抜き出す場合は、以下のようなやり方が一般的です。


            ```{r}
            col_list = c('food_and_description', 'Carbohydrate, total, calculated by difference (g)')
            subset_drink_selected = subset_drink[, col_list]
            ```