在R中:如何循环数据帧和多个矩阵?

时间:2014-12-03 05:07:14

标签: r loops for-loop matrix dataframe

假设我有一个包含四个向量的数据框,其结构如下,但是在300个国家/地区持有31年的信息。

year<-c(1999,1999,1999,2000,2000,2000,2001,2001,2001)
country<-c(1,2,3,1,2,3,1,2,3)
class<-c(3,2,2,5,2,2,2,1,4)
count<-c(2,5,6,2,4,8,1,4,3)
df<-data.frame(year,city,class,count) 

  year country class count
1 1999       1     3     2
2 1999       2     2     5
3 1999       3     2     6
4 2000       1     5     2
5 2000       2     2     4
6 2000       3     2     8
7 2001       1     2     1
8 2001       2     1     4
9 2001       3     4     3 

count的值告诉我们某一年,国家和班级有多少辆汽车。在上面的例子中,国家1在1999年只有2辆车在第3级。

我还有31个矩阵(每个year 1个)nrow=438ncol=438。数字438对应于汽车可以属于的等级数。元素的值表示类之间的距离。给出了这个值。

例如:1999年1级和8级车之间的距离为0.0016。

>example_input_matrix_1999[1:10,1:10]

        [,1]   [,2]   [,3]   [,4] [,5] [,6] [,7]   [,8]   [,9]  [,10]
 [1,] 1.0000 0.0000 0.0000 0.0000    0    0    0 0.0016 0.0000 0.0000
 [2,] 0.0000 1.0000 0.0481 0.0000    0    0    0 0.0213 0.0000 0.0000
 [3,] 0.0000 0.0481 1.0000 0.0000    0    0    0 0.0000 0.0065 0.0000
 [4,] 0.0000 0.0000 0.0000 1.0000    0    0    0 0.0138 0.0000 0.0000
 [5,] 0.0000 0.0000 0.0000 0.0000    1    0    0 0.0000 0.0000 0.0000
 [6,] 0.0000 0.0000 0.0000 0.0000    0    1    0 0.0000 0.0000 0.0000
 [7,] 0.0000 0.0000 0.0000 0.0000    0    0    1 0.0000 0.0000 0.0000
 [8,] 0.0016 0.0213 0.0000 0.0138    0    0    0 1.0000 0.0176 0.0067
 [9,] 0.0000 0.0000 0.0065 0.0000    0    0    0 0.0176 1.0000 0.0000
[10,] 0.0000 0.0000 0.0000 0.0000    0    0    0 0.0067 0.0000 1.0000

现在,我想构建一个国家级别的衡量标准,告诉我平均距离&#34;在那个国家的汽车和其他国家的汽车之间。

研究问题是:X国的汽车在T级的汽车在T级看起来像汽车多少。

首先,我从第一年,城市和班级开始。在上面的例子中,国家1在第三级只有2辆车。现在我发现当年其他国家的汽车在哪些级别。我发现在国家2的2级车中有5辆车,在1999年的国家3中在2级车中找到6辆车。

其次,我想在1999年找到3级和2级之间的距离,所以我需要参考输入矩阵,它保持这些级别之间的那一年的距离。我发现2级和3级之间的距离为0.0481。

第三,我需要通过两个类别中汽车数量的乘积(在这种情况下为10倍0.0481)来乘以该距离。我想为两国之间的每一对班级做这件事。如果我总结这些,我在任何一对国家之间都有总距离

第四,因为我对平均距离感兴趣,所以我想将此值除以国家1中汽车总数和国家2中汽车总数的乘积。 / p>

此计算的输出是我正在寻找的,但不知道将其编码为谁。

最后我希望31个矩阵(300 * 300)的输出在行和列上有国家/地区,其中元素代表每年这些国家/地区之间的汽车类别的平均距离

非常感谢任何帮助。

谢谢!

0 个答案:

没有答案