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

R 有效地求和通过不同矩阵相关的整行,r,optimization,apply,R,Optimization,Apply,我的代码的目标是创建一个新的矩阵BySite,其中的行是LOLZ行的总和(我使用的是colSums()),它们在XY矩阵中相关。因此,如果两个XY行匹配,那么我希望新矩阵有一行,它对相关行(根据XY)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,

我的代码的目标是创建一个新的矩阵
BySite
,其中的行是
LOLZ
行的总和(我使用的是
colSums()
),它们在
XY
矩阵中相关。因此,如果两个
XY
行匹配,那么我希望新矩阵有一行,它对相关行(根据
XY
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*")
}
洛兹呢

 LOLZ<-matrix(abs(rnorm(2000*50)),2000,50)

LOLZ下面是一个使用较小数据集的尝试:

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
您能提供较小的“XY”和“LOLZ”矩阵以及所需的输出吗?如果要使用
runif/sample
等,那么最好在开始时添加
set.seed
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