编写循环以提取Comtrade数据并将其导出到多个csv文件中

编写循环以提取Comtrade数据并将其导出到多个csv文件中,r,csv,for-loop,dataframe,undefined,R,Csv,For Loop,Dataframe,Undefined,我正在编写一个循环,以提取每个国家(比如国家I)的联合国商品贸易出口数据,并将它们按国家导出到单独的CSV文件中供以后使用。因此,我使用“get.Comtrade”函数(由Stefan a.编写)作为起点,并通过Comtrade数据中每个唯一的3位国家代码进行循环。另外,我只对获取“商品”“出口”数据感兴趣(从国家I到任何其他国家),而对使用get.Comtrade函数提取的“列表”中包含的所有其他信息没有任何用处,因此我只提取每个国家的“年”、“报告者”、“合作伙伴”和“贸易价值”数据,并将它

我正在编写一个循环,以提取每个国家(比如国家I)的联合国商品贸易出口数据,并将它们按国家导出到单独的CSV文件中供以后使用。因此,我使用“get.Comtrade”函数(由Stefan a.编写)作为起点,并通过Comtrade数据中每个唯一的3位国家代码进行循环。另外,我只对获取“商品”“出口”数据感兴趣(从国家I到任何其他国家),而对使用get.Comtrade函数提取的“列表”中包含的所有其他信息没有任何用处,因此我只提取每个国家的“年”、“报告者”、“合作伙伴”和“贸易价值”数据,并将它们组合到CSV表中

为了举例说明,我从2006年的美国(国家代码=842)开始,所以我写了

d包含两个项目“验证”和“数据”,其中后者(数据)包含35个变量,是感兴趣的数据框架。但是,我只需要以下信息(按列号索引):
[2] 年份,[10]rtTitle=Reporter,[13]ptTitle=Partner,[32]Trade.Value..US..
所以我进去了


df一条评论:
df谢谢你的评论。实际上,我试着在数据框中每个变量的位置后面加逗号:df我不确定这是如何响应我的评论的。如果
d$data
是一个data.frame,那么
df对于混淆表示抱歉。我正在尝试不同的修复方法。当使用您推荐的方法时,我仍然会收到相同的错误消息,似乎我无法将命令传递给子集数据帧。一条注释:
df感谢您的注释。实际上,我试着在数据框中每个变量的位置后面加逗号:df我不确定这是如何响应我的评论的。如果
d$data
是一个data.frame,那么
df对于混淆表示抱歉。我正在尝试不同的修复方法。当使用您推荐的方法时,我仍然会收到相同的错误消息,似乎我无法将命令传递给子集数据帧。
    for (i in 1:length(country_list)){  
  d <- get.Comtrade(r="i", p="all", ps="2006", type="C", rg="2", freq="A")
  df <-  cbind(d$data[2], d$data[10], d$data[13], d$data[32])
  df$million <- as.numeric(as.character(df[,4]))/1000000
  myfile <- file.path("~/working directory", paste0("_", i, ".csv"))
  write.table(df, file=myfile, na = "NA", row.names = FALSE, col.names = FALSE, quote=FALSE, append=FALSE, sep="")
  }
get.Comtrade <- function(url="http://comtrade.un.org/api/get?"
                         ,maxrec=50000
                         ,type="C"
                         ,freq="A"
                         ,px="HS"
                         ,ps="now"
                         ,r
                         ,p
                         ,rg="all"
                         ,cc="TOTAL"
                         ,fmt="json"
)
{
  string<- paste(url
                 ,"max=",maxrec,"&" #maximum no. of records returned
                 ,"type=",type,"&" #type of trade (c=commodities)
                 ,"freq=",freq,"&" #frequency
                 ,"px=",px,"&" #classification
                 ,"ps=",ps,"&" #time period
                 ,"r=",r,"&" #reporting area
                 ,"p=",p,"&" #partner country
                 ,"rg=",rg,"&" #trade flow
                 ,"cc=",cc,"&" #classification code
                 ,"fmt=",fmt        #Format
                 ,sep = ""
  )

  if(fmt == "csv") {
    raw.data<- read.csv(string,header=TRUE)
    return(list(validation=NULL, data=raw.data))
  } else {
    if(fmt == "json" ) {
      raw.data<- fromJSON(file=string)
      data<- raw.data$dataset
      validation<- unlist(raw.data$validation, recursive=TRUE)
      ndata<- NULL
      if(length(data)> 0) {
        var.names<- names(data[[1]])
        data<- as.data.frame(t( sapply(data,rbind)))
        ndata<- NULL
        for(i in 1:ncol(data)){
          data[sapply(data[,i],is.null),i]<- NA
          ndata<- cbind(ndata, unlist(data[,i]))
        }
        ndata<- as.data.frame(ndata)
        colnames(ndata)<- var.names
      }
      return(list(validation=validation,data =ndata))
    }
  }
}
library(rjson)
string <- "http://comtrade.un.org/data/cache/partnerAreas.json"
reporters <- fromJSON(file=string)
reporters <- as.data.frame(t(sapply(reporters$results,rbind)))