在R

时间:2017-03-11 19:30:37

标签: r function apply

试图想出一个很好的功能来实现以下目标(看起来很明显,但没有足够的经验来考虑它)

我想解决4个问题:

  1. 计算数据集中所有点(城市)之间的距离(所以5行,(n-1)+(n-2)+ ... +(n-n))10总距离)
  2. 计算这些城市人口的产品
  3. 计算重力
  4. 确定移动方向(对两个比较城市中较大人口的简单检查)
  5. 基于像这样的数据集(值有点没有灵感,但它们应该代表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. 距离:位置A-B
    2. pop.prod。 =两个种群的产物(A. 和B)
    3. gravity = 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
      
    5. 小免责声明:这不是作业:) 我只想看看我住的地区的运动/通勤估计,希望它对每个人都有好处! 它背后的想法被称为“基于重力的模型”,以估计通勤。

      欢迎任何帮助,也欢迎问题的子集。 非常感谢提前。

1 个答案:

答案 0 :(得分: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

我认为这会给你一个想法,你可以弄清楚其余部分。