我有一个包含3个变量超过1,100万条记录的数据集。我创建了一个这样的地图:
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))
我想查看每个条目,如果满足两个条件,则将第一列的值存储在向量中。然后在最后,取该向量的平均值并将其存储在地图中。
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)
}
}
}
第一个问题是它需要永远。第二个问题是地图没有更新,但我相信在解决第一个问题时可以修复一次。我没有并行处理的经验,但确实有一些申请家庭。任何帮助将不胜感激!
答案 0 :(得分:0)
我猜你以后想要将这个&#34; map&#34; -object的坐标移动到rownames和colnames位置,但这样的事情应该快得多:
这是一个&#34;数据&#34;例如:
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
您需要发布代码才能为data
- 对象制作正确的测试用例。