2017-03-11 90 views
0

冥思苦想了良好的功能,實現了以下(似乎是顯而易見的,但經驗不足纔想起來)生成數據集R中

有4個問題,我想解決:

  1. 計算數據集中所有點(城市)之間的距離(所以在5行,(n-1)+(n-2)+ ... +(nn))總共10個距離)
  2. 計算那些城市
  3. 計算重力
  4. 確定運動的方向(大兩個相比較城市的人口的簡單檢查)

基於這樣一個數據集(值是有點非啓發,但他們應該代表LON-LAT的):

 location population 
1 10,100  1000 
2 20,200  2000 
3 30,300  3000 
4 40,400  4000 
5 50,500  5000 

獲取到包含一個數據集:

  1. 距離:位置AB
  2. pop.prod。 =兩個羣體的產物(A 和B)
  3. gravity = pop.prod。/distance
  4. directedness = if A> B;從B到A的邊緣,否則;從A邊向B

     distance pop.prod. gravity directedness 
    1-2 x   x   x   x 
    1-3 x   x   x   x 
    1-4 x   x   x   x 
    1-5 x   x   x   x 
    2-3 x   x   x   x 
    2-4 x   x   x   x 
    2-5 x   x   x   x 
    3-4 x   x   x   x 
    3-5 x   x   x   x 
    4-5 x   x   x   x 
    

小免責聲明:這不是一個任務:) 我只是想看看在我住的小區運動/通勤估計,並希望它的好處大家! 它背後的想法被稱爲「基於重力的模型」,以估計通勤。

任何幫助,歡迎,也是問題的子集。 非常感謝提前。

+0

歡迎來到SO,Igor。顯示你的嘗試是最好的做法。否則,這看起來有點奇怪,人們不會「做其他工作」。 – lukeA

+0

非常感謝你@lukaA,我不知道從哪裏開始以及如何去做,所以這非常有幫助,非常感謝。 – Igor

回答

1

這裏有一個首發:

df <- read.table(header=T, text="  location population 
1 10,10  1000 
2 20,20  2000 
3 30,30  3000 
4 40,40  4000 
5 50,50  5000", stringsAsFactors=F) 

locs <- do.call(rbind, lapply(strsplit(df$location,",",T), as.integer)) 
(idx <- combn(1:nrow(locs), 2)) 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
# [1,] 1 1 1 1 2 2 2 3 3  4 
# [2,] 2 3 4 5 3 4 5 4 5  5 

(distance <- geosphere::distHaversine(locs[idx[1,],], locs[idx[2,],])) 
# [1] 1546488 3044009 4463588 5770107 1500779 2930665 4260187 1436941 2785801 1360777 

(popProd <- df$population[idx[1,]]*df$population[idx[2,]]) 
# [1] 2000000 3000000 4000000 5000000 6000000 8000000 10000000 12000000 15000000 20000000 

我覺得這給你一個想法,你可以計算出其餘部分。