[R] organizing data in a matrix avoiding loop

A M Lavezzi mario.lavezzi at unipa.it
Fri May 26 18:41:03 CEST 2017


Hi Ulrik
thanks a lot for your suggestion. I followed the suggestion of Sarah (the
first on the thread) and solved my problem

I will keep into account you suggestion anyway
Mario

On Fri, May 26, 2017 at 2:17 PM, Ulrik Stervbo <ulrik.stervbo at gmail.com>
wrote:

> Hi Mario,
>
> does acast from the reshape2 package help?
>
> dfa<- data.frame(iso_o = letters[c(1, 1:4)], iso_d = letters[6:10], year =
> c(1985, 1985, 1986, 1987, 1988), flow = c(1,2,3,4, NA))
> reshape2::acast(dfa, iso_o ~ iso_d, fun.aggregate = sum, value.var =
> "flow")
>
> HTH
> Ulrik
>
> On Fri, 26 May 2017 at 13:47 A M Lavezzi <mario.lavezzi at unipa.it> wrote:
>
>> 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 <+39%20091%202389%202208>
>> fax ++39 091 6111268 <+39%20091%20611%201268>
>> skype: lavezzimario
>> email: mario.lavezzi (at) unipa.it
>> <https://urlsand.esvalabs.com/?u=http%3A%2F%2Funipa.it&e=ae0ec65b&h=e13e0f75&f=y>
>> web: http://www.unipa.it/~mario.lavezzi
>> <https://urlsand.esvalabs.com/?u=http%3A%2F%2Fwww.unipa.it%2F~mario.lavezzi&e=ae0ec65b&h=f8f16f65&f=y>
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> <https://urlsand.esvalabs.com/?u=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-help&e=ae0ec65b&h=8af6ace6&f=y>
>> PLEASE do read the posting guide http://www.R-project.org/
>> posting-guide.html
>> <https://urlsand.esvalabs.com/?u=http%3A%2F%2Fwww.R-project.org%2Fposting-guide.html&e=ae0ec65b&h=ea1999c9&f=y>
>> and provide commented, minimal, self-contained, reproducible code.
>
>


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