我知道在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)
}