我有两个数据表。
一种是房屋位置为d8.small(东座标,北座标,街道名称和身份证号),另一种为在一个半角内的公司数为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
STATENT[1:5, .(E_KOORD,N_KOORD,`Arbeitsstätten Total`)]
E_KOORD N_KOORD Arbeitsstätten Total
1: 2486200 1111300 3
2: 2486200 1111500 3
3: 2486300 1111000 3
4: 2486300 1111700 3
5: 2486400 1111600 3
我需要在第一个数据表中添加一个新列,其中包含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]
答案 0 :(得分:0)
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]