我正在制定一个餐饮计划,我需要一些关于如何将每天的摄入量分成几餐的建议。
我有一个向量,每个元素代表一个人为了满足他/她每天蛋白质、碳水化合物、脂肪和fiber..etc的摄入量而应该吃的不同食物的#克。
该向量如下所示:
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)向量,它表明食物来源是否被认为是“早餐”。“午餐”、“晚餐”和“小吃”也是如此。
我想把向量“摄入量”分成一日三餐。我的第一个想法是,简单地取intake*早餐的点积,得到所有被认为是早餐的食物,然后就把它们吃了。这种方法不会给出非常合理的答案,因为它可能会让位于早餐要吃的食物,而剩下的饭菜几乎没有剩下的食物。
假设一个人一天吃5顿饭;
我想将摄入量向量分成5个单独的向量,将被认为是早餐的食品放在新的早餐向量中。此外,我还希望能够调整每种食物在每个载体中的含量:例如
默认(早餐50%蛋白质或更低,10%脂肪或更高,40%碳水化合物或更低,晚间小吃70%蛋白质或更低,25%脂肪或更高,5%碳水化合物或更低)。
这样我就可以调整,让一个人早餐吃大量蛋白质,在锻炼之前吃大量碳水化合物。
发布于 2017-04-01 13:38:20
当你说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)]))现在,你说的最难的部分是如何根据营养/膳食食物的相对部分进行非均匀分割。克与服务的比例是多少,这样我们就能知道这个人摄入了多少蛋白质?似乎我们需要这样做才能让摄入量与营养信息一起工作。
https://stackoverflow.com/questions/43150364
复制相似问题