拆分矢量介绍更多带约束的向量

时间:2017-03-31 22:05:57

标签: r if-statement vector

我正在制定膳食计划,我需要一些关于如何将每日摄入量分成几餐的建议。

我有一个载体,其中每个元素代表一个人应该吃的不同食物的克数,以满足他/她每天摄入的蛋白质,碳水化合物,脂肪,纤维等。

矢量看起来像这样:

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餐;

我想将摄入量分为5个独立的载体,将食物作为早餐进入新的早餐载体。 此外,我希望能够调整每个载体中每种食物的含量:例如

默认(早餐50%蛋白质或更低,10%脂肪或更高,40%碳水化合物或更低,晚间零食70%蛋白质或更低,25%脂肪或更高,5%碳水化合物或更低)。

所以我可以进行调整,以便在早餐和大量碳水化合物吃掉之前吃掉大量的蛋白质。

1 个答案:

答案 0 :(得分:0)

当你说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)]))

现在你说的难点是如何根据营养/膳食相关部分进行非均匀分割。 什么是克与服务比例,所以我们知道这个人得到多少蛋白质?似乎我们需要使用营养信息进行摄入。