【发布时间】:2015-02-21 19:42:32
【问题描述】:
我有一个小问题,我不确定如何解决该错误。
基本上,我有两列,我想使用 Double For 循环来计算两列中每个数字之间的平均值,以便生成平均值向量。澄清一下,apply 和 mean 函数不是最好的函数,因为我只需要一半的可能组合来获得平均值。例如:
Col1<-c(1,2,3,4,5)
Col2<-c(1,2,3,4,5)
Q1<-data.frame(cbind(Col1, Col2))
Q1$mean<-0
for (i in 1:length(Q1$Col1)) {
for (j in i+1:length(Q1$Col2)) {
Q1$mean[i]<-(Q1$Col1[i]+Q1$Col2[j])/2
}
}
基本上,对于 Q1$Col1 中的每个数字,我希望它与 Q1$Col2 平均。我想使用双循环的原因是为了消除重复。这是提供可视化的矩阵版本:
1.0 1.5 2.0 2.5 3.0
1.5 2.0 2.5 3.0 3.5
2.0 2.5 3.0 3.5 4.0
2.5 3.0 3.5 4.0 4.5
3.0 3.5 4.0 4.5 5.0
这里,每一行代表 Q1$Col1 中的一个数字,每一列代表 Q1$Col2 中的一个数字。但是,请注意矩阵对角线的两侧都有冗余。因此,使用双 For 循环,我消除了冗余以获得唯一案例组合的平均值。使用上面的矩阵,它应该是这样的:
1.0 1.5 2.0 2.5 3.0
2.0 2.5 3.0 3.5
3.0 3.5 4.0
4.0 4.5
5.0
【问题讨论】:
-
您的示例不可重现,因为您在
Q1中没有两列,或者您可以在矩阵上执行Q1$Col1之类的操作。这里期望的输出是什么? -
我对这个算法的预期结果感到困惑,但它可能有一个错误:
i+1:length(Q1$Col2)首先生成一个从 1 到length(Q1$Col2)的序列,然后将 1 加到向量。或许,OP的意思是从i+1到length(Q1$Col2)的序列,例如可以通过(i+1):length(Q1$Col2)得到。 -
说实话,不是很多。您能否为您的数据集显示手动计算的预期输出?
-
在你的第二个循环中,尝试将
i + 1放在括号内,如(i+1) -
@DavidArenburg 您先生是救世主!你想要我做什么?哈哈