R 使用2D键:值数据缓慢填充矩阵
我有一个数据集,有超过1100万条3个变量的记录。我创建了一张这样的地图: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”
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