R 使用2D键:值数据缓慢填充矩阵

R 使用2D键:值数据缓慢填充矩阵,r,vectorization,R,Vectorization,我有一个数据集,有超过1100万条3个变量的记录。我创建了一张这样的地图: map <- matrix(, nrow = 115, ncol = 42) map[(2:nrow(map)),1]<-sapply(1:(nrow(map)-1), function(x) 420+5*(x-1)) map[1,(2:ncol(map))] <- sapply(1:(ncol(map)-1), function(x) -10+.5*(x-1)) map我猜您稍后会想将这个“map”

我有一个数据集,有超过1100万条3个变量的记录。我创建了一张这样的地图:

map <- matrix(, nrow = 115, ncol = 42)
map[(2:nrow(map)),1]<-sapply(1:(nrow(map)-1), function(x) 420+5*(x-1))
map[1,(2:ncol(map))] <- sapply(1:(ncol(map)-1), function(x) -10+.5*(x-1))

map我猜您稍后会想将这个“map”对象的坐标移动到rownames和colnames位置,但类似这样的操作应该会快得多:

这是一个“数据”示例:


data您使用的是什么语言?那是R吗?在这种情况下,您应该编辑您的帖子并添加相应的标记。删除bigdata和parallelization标记。它们并不真正适用于这个中等规模的任务。
for ( i in 2:42){
  for (j in 2:2){
    values <- c()
    sapply(1:nrow(data),function(k){
        if (data[k,2] == map[j,1] & data[k,3] == map[1,i]){
           values<-c(values,data[k,1])
        }
     })
     if(length(values) != 0){
       map[j,i] = mean(values)
     }
 }
}
data <- cbind( value=sample(36),  expand.grid(x=1:6, y=1:6))

dat2 <- as.data.frame( as.table (  tapply(data[,1], list( x=data[,2], y=data[,3] ), 
                                     FUN=mean, na.rm=TRUE) ) )
map[ cbind( 1+as.numeric(dat2[,1]), 1+as.numeric(d

at2[,2])) ]  <- dat2[,3]
> map[1:10,1:10]
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]   NA  -10 -9.5   -9 -8.5   -8 -7.5   -7 -6.5    -6
 [2,]  420   27 10.0   22 28.0   21 25.0   NA   NA    NA
 [3,]  425    7 11.0    1 20.0    4  6.0   NA   NA    NA
 [4,]  430   16  9.0   24 23.0   18 30.0   NA   NA    NA
 [5,]  435   26  2.0   35 12.0   34 32.0   NA   NA    NA
 [6,]  440    3 14.0   19  5.0   15  8.0   NA   NA    NA
 [7,]  445   33 17.0   31 29.0   36 13.0   NA   NA    NA
 [8,]  450   NA   NA   NA   NA   NA   NA   NA   NA    NA
 [9,]  455   NA   NA   NA   NA   NA   NA   NA   NA    NA
[10,]  460   NA   NA   NA   NA   NA   NA   NA   NA    NA