Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双精度For循环并计算R中的平均值_R_For Loop_Mean - Fatal编程技术网

双精度For循环并计算R中的平均值

双精度For循环并计算R中的平均值,r,for-loop,mean,R,For Loop,Mean,我有一个小问题,我不确定如何修复错误 基本上,我有两列,我想使用双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)) { f

我有一个小问题,我不确定如何修复错误

基本上,我有两列,我想使用双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中的一个数字。但是,请注意,矩阵对角线的两侧都有冗余。因此,使用Double 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
means <- rowMeans(Q1)
cbind(Q1, means)

我想你要问的是:给定两个数字向量,我怎么才能找到每个向量中第一个项的平均值,每个向量中第二个项的平均值,依此类推。如果是这样的话,那么这里有一个方法

首先,要使用
cbind()
not
rbind()
来获取列而不是行

Col1<-c(1,2,3,4,5)
Col2<-c(2,3,4,5,6)
Q1<-cbind(Col1, Col2)
更通用的方法是使用
apply()
函数,它将允许我们对每一列或每一行应用一个函数。这里我们使用参数
1
将其应用于行(因为第一行从
Col1
Col2
中获取第一项,等等)

结果如下:

#> [1] 1.5 2.5 3.5 4.5 5.5
如果您真的希望它们出现在现有矩阵中,您可以这样做:

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
means <- rowMeans(Q1)
cbind(Q1, means)

意味着您不需要循环来获得平均值,您可以使用矢量化操作:

Col1 <- c(1,2,3,4,5)
Col2 <- c(2,3,4,5,6)
Mean <- (Col1+Col2)/2
Q1 <- rbind(Col1, Col2, Mean)

Col1您可以使用
outer
函数首先计算平均值,然后使用
lower.tri
NA
值填充矩阵对角线下方的区域

matrix<-outer(Q1$Col1, Q1$Col2, "+")/2
matrix[lower.tri(matrix)] = NA

matrix由于您在
Q1
中没有两列,或者您可以在矩阵上执行类似于
Q1$Col1
的操作,因此我们的示例不可重复。这里期望的输出是什么?我对该算法的预期结果感到困惑,但可能它有一个错误:
I+1:length(Q1$Col2)
首先生成一个从1到
length(Q1$Col2)
的序列,然后将1添加到向量的每个元素。也许,OP是指从
i+1
长度(Q1$Col2)
的序列,例如,可以通过
(i+1):长度(Q1$Col2)
来获得。老实说,不太可能。您能为您的数据集显示手动计算的预期输出吗?在第二个循环中,尝试将
i+1
放在括号内,如
(i+1)
@DavidArenburg您是救世主!你想让我做什么?哈哈
matrix<-outer(Q1$Col1, Q1$Col2, "+")/2
matrix[lower.tri(matrix)] = NA