【问题标题】:Loop in R matching values across dataframes?跨数据帧循环R匹配值?
【发布时间】:2020-03-15 00:43:35
【问题描述】:

我有两个数据框,一个 (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,它从下面的公式中取值(我认为这比用文字解释清楚得多,但如果有必要我可以这样做)。

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

编辑:用文字澄清公式,对于每个城市年的观察,我想取那一年每个其他城市的Value,乘以Connections两个城市,并将每个值相加。例如,对于 2000 年的纽约,我想将其与 LA 的联系乘以 2000 年 LA 的值,然后对 DC 等 2000 年的每个城市做同样的事情,并将结果相加得到一个 Flow NY2000 的值。

【问题讨论】:

  • 我认为你需要用文字解释你的公式,至少我不明白。如果我理解正确,您想将第二个表中 City1 列中每个城市的所有连接相加,然后将这些值附加到第一个表中 City 列中的相应城市?
  • 嗨,Jerry,您不需要 for 循环。如果假设您提供包含 NY 的 df1 的子集和 df2 的子集子集子集(df2,City1=="NY") 并向我们展示预期结果可能会更容易?
  • 像@user2974951 我可以大致猜到,但是为了给你正确的解决方案,最好有一些数据。
  • df1中的城市和df2中两个城市的组合是什么关系?
  • @camille, df2 基本上只是给了我df1(以及一些)所有城市之间的连接数。

标签: r loops statistics match


【解决方案1】:

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

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))
  }}

【讨论】:

  • 谢谢!我不确定这是否可行。在这种情况下,在我看来,Flow 只是每个城市在给定年份的Value 与其他城市的连接总数的乘积。我想做一些更复杂的事情:对于给定年份的每个城市,我想通过Connections 将其与其他所有城市配对,通过将其乘以其他城市的Value 来计算“二元流”,然后然后将所有二元流相加到一个新的Flow 变量中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多