R程序设计;双索引循环查找子集数据帧的平均值

R程序设计;双索引循环查找子集数据帧的平均值,r,loops,for-loop,indexing,subset,R,Loops,For Loop,Indexing,Subset,我想运行一个使用三个索引的“for”循环。基本上,我想对一个数据帧进行子集划分,找到子集的平均值,然后将平均值放在一个新的数据帧中。我在运行这个循环时遇到问题;我得到的只是楠的 第一个索引用于匹配新数据帧的行(我称之为data.avg); 第二个索引用于索引将在子集条件的前半部分中使用的向量(日期值来自特定月份); 第二个索引与上述相同,但适用于子集条件的第二部分(该行与早餐/晚餐/零食相关) 例如,当我在没有循环的情况下运行平均值时 mean(subset(data1,

我想运行一个使用三个索引的“for”循环。基本上,我想对一个数据帧进行子集划分,找到子集的平均值,然后将平均值放在一个新的数据帧中。我在运行这个循环时遇到问题;我得到的只是楠的

第一个索引用于匹配新数据帧的行(我称之为data.avg); 第二个索引用于索引将在子集条件的前半部分中使用的向量(日期值来自特定月份); 第二个索引与上述相同,但适用于子集条件的第二部分(该行与早餐/晚餐/零食相关)

例如,当我在没有循环的情况下运行平均值时

mean(subset(data1, 
            months(data1$date) == "September" & data1$serving == "Breakfast")$unit)
我得到了正确的平均值。因此,我认为我的问题可能在于索引设置

我们将非常感谢您的任何帮助

谢谢

编辑;修正了上面的代码。结果数据帧如下所示

months bf.avg dinner.avg snack.avg
1    August      5         49       NaN
2 September      5         49       NaN
3   October      5         49       NaN
4  November      5         49       NaN
5  December      5         49       NaN
6   January      5         49       NaN
这就是我要找的

mean(subset(data1, 
+             months(data1$date) == "September" & data1$serving == "Breakfast")$unit)
[1] 1
> mean(subset(data1, 
+             months(data1$date) == "September" & data1$serving == "Dinner")$unit)
[1] 5
> mean(subset(data1, 
+             months(data1$date) == "September" & data1$serving == "Snacks")$unit)
[1] 49
我的理解是,这些应该是数据1.avg[1,1:3]

您在
服务.index
中设置了“零食”,但在
数据1
中有“零食”

然后在for循环中尝试以下代码:

data.avg[j,v+1] = mean(
    subset(data1,months(data1$date) == month.name[i] & as.character(data1$serving) == serving.index[v])$units)

data.avg
     months bf.avg dinner.avg snack.avg
1    August      1          5        49
2 September      1          5        49
3   October      1          5        49
4  November      1          5        49
5  December      1          5        49
6   January      1          5        49

帮助(“聚合”)
可能重复感谢!它修复了第一列,但其他两列似乎已关闭(我在不运行循环的情况下计算了平均值)。我认为所有晚餐的平均值应该是5(所有月份),所有零食的平均值应该是49。你知道为什么我会得到连续的数字(1:6)吗?你只修改了第二列:data.avg[j,2]谢谢!修正了错误。我错误地执行了索引。大部分是我的打字错误。
data.avg[j,v+1] = mean(
    subset(data1,months(data1$date) == month.name[i] & as.character(data1$serving) == serving.index[v])$units)

data.avg
     months bf.avg dinner.avg snack.avg
1    August      1          5        49
2 September      1          5        49
3   October      1          5        49
4  November      1          5        49
5  December      1          5        49
6   January      1          5        49