从2个文件中获取某些数据到矩阵中

时间:2017-08-15 14:45:07

标签: r vector

我去了世界银行数据库 - 并选择了2个文件 - GDP和识字率。直觉上我知道可能存在相关性。因此,问题陈述是要找出200(约)个国家60年来GDP和识字率的相关性。

这是链接;

http://data.worldbank.org/indicator/NY.GDP.PCAP.CD?view=chart [对于GDP]

http://data.worldbank.org/indicator/SE.ADT.LITR.ZS?view=chart [FOR LIT]

我获得了.CSV格式的数据,并在从顶部跳过几行后读取它。

然后,这是我开始编写的代码;

Lit = read.csv("C:/DIRECTORY/API_SE.ADT.LITR.ZS_DS2_en_csv_v2.csv", skip = 3, header = TRUE, dec = ".")
Gdp = read.csv("C:/DIRECTORY/API_NY.GDP.MKTP.CD_DS2_en_csv_v2.csv", skip = 3, header = TRUE, dec = ".")



#creating a list of variables for each different year
#Without initializing the variables here, the code below did not work

for (i in 5:62)
{
assign(paste0("year", i), 0*i)
}



#running a loop for all the values of each dataset
#The desired result of this in 55 vectors (1 for each year) of some length 
 (as there are many missing values) which have in them values of gdp and lit 
of the same country in the same row 

for (y in 5:62){
  for (c in 1:264){


#checking if values are available as many values are missing
q = is.na(Gdp[c,y])
r = is.na(Lit[c,y])

#now we will assign the values to the specific year

  assign(paste0("year", y), c(Gdp[c,y], Lit[c,y]))

}}

我从中得到的是55个向量(标题为year1到year55),每个向量有2个值。

我明白发生的事情是每个向量,只有最后共存的值被设置(之前的值被下一个等等,依此类推,直到最后)。

现在,什么是理想的,是一种增长年矢量的方法,以便它包含给定年份的所有共存(即,当一个国家,某一年,同时具有gdp和lit值)。 / p>

1 个答案:

答案 0 :(得分:0)

出于好奇,你以前在MATLAB工作过吗?你的方法看起来很像我早期尝试过的,我从MATLAB来到R。在R中,如果可能的话,我建议对data.frame中的列/变量进行整体操作,而不是试图通过每个单元格遍历它们。

请原谅我,如果这个回复没有很好的格式化,我相当新的堆栈交换。

我不完全确定你的目标是什么, 这段代码

> for (i in 5:62) { assign(paste0("year", i), 0*i) }

创建了57个数字对象,名为" year5"," year6"," year7"等...通过" year62"每个都只包含数字0.这些与代码的其余部分没有任何关联,并被代码的第二部分覆盖

for (y in 5:62){
  for (c in 1:264){


#checking if values are available as many values are missing
q = is.na(Gdp[c,y])
r = is.na(Lit[c,y])

#now we will assign the values to the specific year

  assign(paste0("year", y), c(Gdp[c,y], Lit[c,y]))

}}

在最后一部分中生成对象并在同一口气中覆盖它们。

关于你想要完成的事情

  

现在,什么是理想的,是一种增长年矢量的方法   包含所有共存(即某个国家,某一年,   给定年份的gdp和lit值值。

这很困难,因为选择仅存在于Gdp和Lit中的数据会产生奇怪的形状数据框。
如果你运行

!is.na(Gdp) & !is.na(Lit)

您可以看到这一点,因为所有TRUE值都是在给定国家/地区的任一数据集中没有NA的年份,而FALSE值都是那些没有NA的值。

修改

如果我理解你的回答是正确的,请试试这个

mapply(FUN = function(x = Gdp, y = Lit){
  output <- cbind(x,y)
  output[!is.na(x)&!is.na(y),]
}, x = Gdp[,5:62],y = Lit[,5:62])

这对GDP的每一栏的作用是什么?当且仅当两个值都存在时,它才会返回该年的值。

它将此作为列表对象返回,其中列表中的每个条目都是其中一年的数据框。我不太确定这是否是您想要的,因为您不再拥有国家标签行,因此不知道每个条目属于哪个国家/地区。您可以通过使用名称重新加入数据或修改该代码以保存国家/地区名称变量来解决此问题,但我会留给您。