加快代码速度,以获得半径范围内的公司,并用R求和

加快代码速度,以获得半径范围内的公司,并用R求和,r,datatable,coordinates,R,Datatable,Coordinates,我有两个数据表。一个住宅位置为d8.small(东坐标、北坐标、街道名称和id号),另一个住宅位置为STATENT公司编号(东坐标、北坐标和公司编号),在一公顷范围内 d8.small[1:5, .(GKODE,GKODN,strasse, id)] GKODE GKODN strasse id 1: 2608850 1262583 hauptstrasse 100 2: 2612952 1267232 ramsteinerstr

我有两个数据表。一个住宅位置为d8.small(东坐标、北坐标、街道名称和id号),另一个住宅位置为STATENT公司编号(东坐标、北坐标和公司编号),在一公顷范围内

d8.small[1:5, .(GKODE,GKODN,strasse, id)]
     GKODE   GKODN           strasse       id
1: 2608850 1262583      hauptstrasse      100
2: 2612952 1267232 ramsteinerstrasse 10000012
3: 2612952 1267232 ramsteinerstrasse 11776807
4: 2623360 1247413  mosermattstrasse 10000061
5: 2622938 1259411      im pfauenhof 10000223
在第一个数据表中,我需要一个新的列,其中包含2000米以内的公司数量

我目前的方法似乎有效,但速度很慢:我如何加快速度

d8.small[,
         c("idex_vollzeitstellen") := {
            dist = (GKODE - STATENT[["E_KOORD"]])^2 + (GKODN - STATENT[["N_KOORD"]])^2 
            .(sum(STATENT$`Arbeitsstätten Total`[sqrt(dist < 25000000)]))},by = id]
d8.小[,,
c(“idex_volzeitstellen”):={
dist=(GKODE-STATENT[[E_KOORD]])^2+(GKODN-STATENT[[N_KOORD]])^2
(总金额(国家$`Arbeitsstätten Total`[sqrt(地区<25000000)])},按=id)
d8.small=fread('GKODE GKODN strasse id
2608850 1262583 hauptstrasse 100
2612952 1267232拉姆斯泰纳大街1000012
2612952 1267232拉姆斯泰纳大街11776807
2623360 1247413莫斯马特大街1000061
2622938 1259411 impfauenhof 10000223',表头=真)
STATENT=fread('E_KOORD N_KOORD Arbeitsstätten总计
248620011300NA3
2486201111500NA3
248630011000NA3
2486301111700钠3
2486401111600 NA 3',表头=真)
d8.小[,支票:=1]
STATENT[,check:=1]
d8.small=merge(d8.small,STATENT,by='check',how='left',allow.cartesian=T)
d8.小[,距离:=ifelse((GKODE-E_-KOORD)^2+(GKODN-N_-KOORD)^2<2000^2,1,0)]
d8.小[,和(距离),id]
d8.small=fread('GKODE GKODN strasse id
2608850 1262583 hauptstrasse 100
2612952 1267232拉姆斯泰纳大街1000012
2612952 1267232拉姆斯泰纳大街11776807
2623360 1247413莫斯马特大街1000061
2622938 1259411 impfauenhof 10000223',表头=真)
STATENT=fread('E_KOORD N_KOORD Arbeitsstätten总计
248620011300NA3
2486201111500NA3
248630011000NA3
2486301111700钠3
2486401111600 NA 3',表头=真)
d8.小[,支票:=1]
STATENT[,check:=1]
d8.small=merge(d8.small,STATENT,by='check',how='left',allow.cartesian=T)
d8.小[,距离:=ifelse((GKODE-E_-KOORD)^2+(GKODN-N_-KOORD)^2<2000^2,1,0)]
d8.小[,和(距离),id]

可能
合并/cbind
,计算并
过滤
?你能通过添加评论详细说明哪一列代表什么吗?@NelsonGon我在我的问题中添加了每一列的描述可能
merge/cbind
,计算和
filter
?你能通过添加评论详细说明哪一列代表什么吗?@NelsonGon我在问题中添加了每一列的描述
d8.small[,
         c("idex_vollzeitstellen") := {
            dist = (GKODE - STATENT[["E_KOORD"]])^2 + (GKODN - STATENT[["N_KOORD"]])^2 
            .(sum(STATENT$`Arbeitsstätten Total`[sqrt(dist < 25000000)]))},by = id]
d8.small = fread('GKODE   GKODN           strasse       id
 2608850 1262583      hauptstrasse      100
 2612952 1267232 ramsteinerstrasse 10000012
 2612952 1267232 ramsteinerstrasse 11776807
 2623360 1247413  mosermattstrasse 10000061
 2622938 1259411      impfauenhof 10000223', header=TRUE)

STATENT = fread('   E_KOORD N_KOORD Arbeitsstätten Total
2486200 1111300         NA           3
 2486200 1111500        NA            3
 2486300 1111000        NA            3
 2486300 1111700        NA            3
 2486400 1111600        NA            3', header=TRUE)

d8.small[, check := 1]
STATENT[, check := 1]
d8.small = merge(d8.small, STATENT, by='check', how='left', allow.cartesian = T)
d8.small[, dist := ifelse((GKODE - E_KOORD)^2 + (GKODN - N_KOORD)^2 < 2000^2, 1, 0)]
d8.small[, sum(dist), id]