跨数据帧循环输入R个匹配值?

时间:2019-11-19 13:17:01

标签: r loops statistics match

我有两个数据帧,其中一个(df1)看起来像这样:

CityYear  City  Year  Value
NY2000    NY    2000  1.2
NY2005    NY    2005  1.0
NY2010    NY    2010  1.4
NY2015    NY    2015  NA
LA2000    LA    2000  0.9
LA2005    LA    2005  1.5
LA2010    LA    2010  1.3
LA2015    LA    2015  NA
SF2000    SF    2000  0.8
SF2005    SF    2005  1.7
SF2010    SF    2010  1.2
SF2015    SF    2015  1.3
...

,以此类推。第二个数据帧(df2)看起来像这样:

City1  City2  Connections
NY     NY     0
NY     LA     32
NY     SF     28
NY     DC     12
...
SF     NY     28
SF     LA     12
...

基本上将每个城市(甚至在我的第一个数据集中都没有)配对并给出他们的联系。请注意,每个城市和一对城市都会重复两次(分别为City1City2)。

df1中,我想计算一个新变量Flow,它从下面的公式中获取值(我认为比用单词解释它要清晰得多,但如有必要,我可以这样做)。

enter image description here

我是R的新手,我不知道从哪里开始。我知道(或相信)我需要一个for循环,但是我不知道从那里去哪里。任何帮助将不胜感激。

编辑:要用文字澄清公式,对于每一个城市年观察,我都希望将当年每个其他城市的Value乘以{{ 1}}在两个城市中,并将每个值加在一起。例如,对于2000年的纽约,我想将其与LA的联系数乘以2000年LA的值,然后对DC进行同样的处理,以此类推,在2000年对每个城市进行同样的操作,然后将结果相加为一个{{1 }}的值Connections

1 个答案:

答案 0 :(得分:0)

我没有数据可以进行测试,但希望这会有所帮助

year = unique(df1$year)
City = unique(df1$City)
value = vector()
connection = vector()
for(i in 1:length(year)){
    for(j in 1:length(City)){
        value = df1$Value[df1$year ==year[i] & df1$City != City[j]] 
        connection = df2$Connection[df2$City1 == City[j] & df2$City2!=City[j]]
        print(sum(value * connection))
  }}