在 R 中生成数据集

Generate dataset in R

正在努力想一个好的功能实现如下(貌似很明显但是经验不足想不到)

我想解决4个问题:

  1. 计算数据集中所有点(城市)之间的距离(所以在 5 行中,(n-1)+(n-2)+...+(n-n))总共 10 个距离)
  2. 计算这些城市人口的乘积
  3. 计算重力
  4. 确定移动方向(简单检查两个比较城市的较大人口)

基于像这样的数据集(值有点缺乏灵感,但它们应该代表经纬度):

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

获取包含以下内容的数据集:

  1. 距离:位置 A-B
  2. pop.prod。 = 两个总体的乘积 (A 和 B)
  3. 重力=pop.prod。 /距离
  4. 方向性 = 如果 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
    

小免责声明:这不是作业:) 我只是想看看我居住地区的movement/commuter估计,希望它对每个人都有好处! 它背后的想法被称为 "Gravity Based Model" 以估计通勤。

欢迎任何帮助,包括问题的子集。 非常感谢。

这是一个开胃菜:

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

我想这给了你一个想法,你可以想出剩下的。