【发布时间】:2020-05-31 05:02:45
【问题描述】:
我有一个大矩阵,对于每个单元格,我想计算落在该特定单元格的列和行中的数字的平均值。
由于矩阵包含 NA 值,我对跳过它们不感兴趣
我怎样才能加快速度并做得更好?
谢谢
mtx <- matrix(seq(1:25), ncol = 5)
mtx[2,3] <- NA
mean.pos <- mtx
for(i in 1:dim(mtx)[1]){
for(j in 1:dim(mtx)[2]){
if(is.na(mtx[i,j])){
} else {
row.values <- mtx[i, !is.na(mtx[i,])]
# -- Remove mtx[i,j] value itself to not count it twice
row.values <- row.values[-which(row.values == mtx[i,j])[1]]
col.values <- mtx[!is.na(mtx[,j]),j]
mean.pos[i,j] <- mean(c(row.values, col.values), na.rm = T)
}
}
}
【问题讨论】:
-
您的代码说您想删除与您的特定单元格具有相同值的行上的值,但是(1)您没有解释,对吗? (2) 注意,浮点的相等性是相对的(并不总是你认为应该的),见stackoverflow.com/q/9508518/3358272。阅读后,请澄清您的问题。 (我怀疑
rowMeans/colMeans或对apply的几个不那么琐碎的调用将满足您的需求。) -
是的,抱歉,我想取列行的平均值。方式对于我这样做的方式,我删除了行向量,否则当我计算平均值时,我将计算该单元格两次。
标签: r row calculator