R:平滑数据(LargeDataset - For For循环太慢)

时间:2015-11-26 17:57:39

标签: r performance for-loop apply smoothing

我知道在R中平滑数据有很多问题,但是,我的知识太基础了,不适用于以下问题!我的关键问题是我的数据是> 1.7米行。

我的问题

我有一个清单" df" 4个相等长度的矢量。

  • df [[1]]是一个包含所有英国邮政编码

  • 的载体
  • df [[2]]是纬度的矢量

  • df [[3]]是经度的载体

  • df [[4]]含有某种物质的浓度

我需要做的是创建一个平滑的矢量'每个邮政编码的浓度,应计算如下:"给定距离内所有邮政编码的加权平均浓度。加权定义为exp(-Distance)"

我目前有以下代码。它工作得很好(我已经在100k邮政编码的子集上进行了测试)。然而,它太慢了,因为它循环了近200万个条目。

有人能帮我找到更快的方法吗?

df <- as.list(Import[,c("Postcode", "Latitude", "Longitude", "Concentration")])

n <- length(df[[1]])
Out <- rep(0,n)

for(i in 1:n){
  #Calculate squared Euclidean Distance
  BaseLat <- df[[2]][i]
  BaseLong <- df[[3]][i] 
  Distance <- (df[[2]]-BaseLat)^2 + (df[[3]]-BaseLong)^2

  #Weightings
  Weight <- ifelse(Distance < 0.01, exp(-Distance), 0)

  #Take average rate and assign to output vector
  Out[i] <- sum(df[[4]]*Weight)/sum(Weight)
}

0 个答案:

没有答案