有效地对通过不同矩阵相关的整行进行求和

时间:2015-03-23 20:42:36

标签: r optimization apply which

我的代码的目标是创建一个新的矩阵BySite,哪些行是LOLZ行的总和(我正在使用colSums()),这些行在{{1}中相关}矩阵。因此,如果两个XY行匹配,那么我希望新矩阵有一行,它对相关的行(根据XYXY行求和。

LOLZ

BySite<-matrix(0,dim(unique(XY))[1],dim(LOLZ)[2]); BySite[1,]<-LOLZ[1,]; for (i in 1:dim(unique(XY))[1]){ tree<-which(apply(XY, 1, function(x) all(x == unique(XY)[i,]))==TRUE) if (length(tree)==1){ BySite[i,]<-LOLZ[tree,] } else { BySite[i,]<-colSums(LOLZ[tree,]) } cat(i," *sigh*") } 是纬度和经度矩阵,因此可以使用:

XY

对于LOLZ

XY<-matrix(c(rep(c(55:74),100),rep(c(101:120),100)),2000,2)

我的代码有效,但速度很慢,正在寻找建议以加快速度。

1 个答案:

答案 0 :(得分:2)

以下是使用较小数据集的尝试:

XY = cbind(rep(50:55, 3), rep(100:105, 3))
set.seed(007); LOLZ = matrix(sample(1:5, 18 * 5, T), 18, 5)

paste_XY = paste(XY[, 1], XY[, 2], sep = "; ") #or apply(XY, 1, paste, collapse = "; ")
ans = rowsum(LOLZ, paste_XY)

#after running your code to build "BySite"
sum(ans != BySite)
#[1] 0