[R] organizing data in a matrix avoiding loop

A M Lavezzi mario.lavezzi at unipa.it
Fri May 26 13:46:52 CEST 2017


Dear R-Users

I have data on bilateral trade flows among countries in the following form:

> head(dataTrade)

      iso_o iso_d year FLOW
1   ABW   AFG 1985   NA
2   ABW   AFG 1986   NA
3   ABW   AFG 1987   NA
4   ABW   AFG 1988   NA
5   ABW   AFG 1989   NA
6   ABW   AFG 1990   NA

where:
iso_o: code of country of origin
iso_d: code of country of destination
year: 1985:2015
FLOW: amount of trade (values are "NA", 0s, or positive numbers)

I have 215 countries. I would like to create a 215x215 matrix , say M, in
which element M(i,j) is the total trade between countries i and j between
1985 and 2015 (i.e. the sum of annual amounts of trade).

After collecting the country codes in a variable named "my_iso", I can
obtain M in a straightforward way using a loop such as:

for (i in my_iso){
  for(j in my_iso)
    if(i!=j){
      M[seq(1:length(my_iso))[my_iso==i],seq(1:length(my_iso))[my_iso==j]]
<-
        sum(dataTrade[dataTrade$iso_o==i &
dataTrade$iso_d==j,"FLOW"],na.rm=TRUE)
    }
}

However, it takes ages.

Is there a way to avoid these loops?

Thanks for your help
Mario


-- 
Andrea Mario Lavezzi
DiGi,Sezione Diritto e Società
Università di Palermo
Piazza Bologni 8
90134 Palermo, Italy
tel. ++39 091 23892208
fax ++39 091 6111268
skype: lavezzimario
email: mario.lavezzi (at) unipa.it
web: http://www.unipa.it/~mario.lavezzi

	[[alternative HTML version deleted]]



More information about the R-help mailing list