簡體   English   中英

分割向量介紹更多有約束的向量

[英]Split vector intro more vectors with constrains

我正在制定膳食計划,我需要一些有關如何將“每日攝入量”分成幾餐的建議。

我有一個向量,其中每個元素代表一個人應吃多少克各種食物,以滿足他/她的日常蛋白質,碳水化合物,脂肪,纖維等攝入量。

向量看起來像這樣:

intake <-  Salmon                 Chicken                   Pesto                  Butter 
         162.573720               96.262731               48.415283                4.560707 
            Yoghurt                Couscous              Boiled Egg                   Apple 
         190.233090              518.741711              198.049714                0.000000 
            Avocado                Broccoli              Grapefruit Quark / Kesella Natural 
           0.000000              350.000000                0.000000              217.450103 
            Oatmeal 
          67.820707 

長度為13。我還有一個矩陣X,其中包含每種食物類型的所有營養成分,它看起來像這樣:

        Salmon Chicken   Pesto Butter Yoghurt Couscous Boiled Egg  Apple Avocado Broccoli Grapefruit
protein   0.18   0.231 0.12740  0.004  0.0342   0.0379     0.1225 0.0000  0.0194   0.0350      0.007
fat       0.12   0.010 0.53850  0.820  0.0300   0.0016     0.0973 0.0005  0.1960   0.0027      0.001
carbs     0.00   0.000 0.04080  0.005  0.0484   0.2182     0.0040 0.1058  0.0170   0.0312      0.070
fibre     0.00   0.000 0.00218  0.000  0.0000   0.0140     0.0000 0.0232  0.0475   0.0310      0.019
Greens    0.00   0.000 0.00000  0.000  0.0000   0.0000     0.0000 0.0000  1.0000   1.0000      0.000
        Quark / Kesella Natural Oatmeal
protein                   0.127   0.133
fat                       0.001   0.070
carbs                     0.036   0.576
fibre                     0.000   0.100
Greens                    0.000   0.000

最后,我有(0/1)-向量,指示食物來源是否被視為“早餐”。 “午餐”,“晚餐”和“小吃”也是如此。

我想將矢量“攝入量”分成一天中可以吃的三餐。 我的第一個想法是簡單地攝取攝入量*早餐的點乘積,以獲取所有被視為早餐的食物,然后直接食用。 這種方法不能給出非常合理的答案,因為它可能讓很多食物作為早餐,而剩下的飯菜幾乎一無所有。

因此,可以說某人每天吃五頓飯;

我想將攝入量向量分為5個單獨的向量,將被視為早餐的食物放入新的早餐向量中。 另外,我希望能夠調整每個向量中每種食物的數量:

默認值(早餐50%蛋白質或更低,10%脂肪或更高,40%碳水化合物或更低,晚間小吃70%蛋白質或更低,25%脂肪或更高,5%碳水化合物或更低)。

這樣我就可以進行調整,以便一個人在早餐前可以吃很多蛋白質和很多碳水化合物。

當您說50%的蛋白質時,我不確定您希望我們如何量化。 您如何權衡非蛋白質食品的營養蛋白質價值? 50%或更少的蛋白質意味着雞肉相對於西蘭花多少錢? 我對營養了解不多。

另外,我必須重新輸入所有數據,所以這里是給那些試圖解決此問題的人/在我澄清之后再回來的時候。 在數據集上使用dput(),然后將輸出復制並粘貼到編輯中,以使您的工作更易於我們使用。

Foods <- c("Salmon", "Chicken","Pesto","Butter","Yoghurt","Couscous","Boiled Egg","Apple","Avocado","Broccoli","Grapefruit","Quark / Kesella Natural","Oatmeal")

intake <- c(162.573720, 96.262731, 48.415283, 4.560707, 190.233090, 518.741711, 198.049714, 0.00000, 0.0000, 350.00000, 0.00000, 217.450103, 67.820707)
names(intake) <- Foods
intake

nutrition <- data.frame(protein = c(0.18, 0.231, 0.12740, 0.004, 0.0342, 0.0379, 0.1225, 0.0000, 0.0194, 0.0350, 0.007, 0.127, 0.133), fat = c(0.12, 0.010, 0.53850, 0.820, 0.0300, 0.0016, 0.0973, 0.0005, 0.1960, 0.0027, 0.001, 0.001, 0.070), carbs = c(0.00,0.000, 0.04080, 0.005, 0.0484, 0.2182, 0.0040, 0.1058, 0.0170, 0.0312, 0.070, 0.036, 0.576), fibre = c(0, 0, 0.0218, 0, 0, 0.0140, 0, 0.0232, 0.0475, 0.0310, 0.019, 0.0, 0.1), greens = c(0,0,0,0,0,0,0,0,1,1,0,0,0), row.names = Foods)
nutrition

# constraints
#Breakfast 
#protein*.5 # maximum
#fat*.1 # minimum
#carbs*.4 # maximum

#Evening Snack 
#protein*.7 # maximum
#fat*.25 # minimum
#carbs*.5 #maximum

Breakfast <- c(0,1,0,0,1,0,1,1,1,0,1,1,1)
Lunch <- c(1,1,1,1,0,1,0,0,0,1,1,1,1)
Dinner <- c(1,1,0,0,0,1,0,0,1,0,0,1,0)
meals <- cbind(Breakfast, Lunch, Dinner)

# even split amongst meals
apply(meals, 2, function(x) 
  intake[which(x == 1)] / rowSums(split(cbind(intake, nutrition, meals), x)$`1`[,colnames(meals)]))

現在,您要說的難點是如何根據營養/餐食的相對比例進行不均勻分配。 克與食用的比率是多少,因此我們知道該人獲得多少蛋白質? 似乎我們需要它來使攝入量與營養信息一起起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM