1

我目前正在研究由 60 个时间序列组成的数据库。我实际上有两个数据集:每个都对应一个特定的变量(A 或 B)。请在下面找到一个示例(即使我的真实数据库包含 60 个姓名和 51 年)变量 A

year name1 name2 name3 
2002   39   56   31 
2003   37   31   52 
2004   51   58   51 
2005   70   59   68 
2006   41   43   37 
2007   43   31   53

变量 B:

year name1 name2 name3 
2002   56   18   24 
2003   72   52   59 
2004   32   30   33 
2005   33   34   51 
2006   47   46   19 
2007   19   32   25 

我想实现一个循环,为每个名称创建以下矩阵。

即:对于name1

year var1 var2 
2002   39   56 
2003   37   72 
2004   51   32 
2005   70   33 
2006   41   47 
2007   43   19

起初,我做了以下事情(因为我只对两个数据集中出现的系列感兴趣)

names=as.matrix(intersect(colnames(df.var_A),colnames(df.var_B))) 
DF.VAR_A=subset(df.var_A,select=noms) 
DF.VAR_B=subset(df.var_B,select=noms)

然后我想得到每个名字对应的系列(A和B)

我得到了岁月:

YEAR=DF.VAR_A[,"year"]

正如预期的那样,我发现:

 DF.VAR_A[,"name1"] 
[1] 39 37 51 70 41 43

现在我想为每个名称创建一个数据框,由年份、对应于变量 A 的值和对应于变量 B 的值组成。

我从名称向量中去掉“YEAR”。

NAMES=names[-c(1)]

然后我试过了:

DATA=NULL 
for (i in 1:length(NAMES)){ 
DATA[i]=cbind(YEAR,DF.VAR_A[,i],DF.VAR_B[,i]) 
}

但是会出现以下警告: 1: In DATA[i] = cbind(Année, DF.VAR_A[, i], DF.VAR_B[, i]) : le nombre d'objets à remplacer n'est pas multiple de la更换尾巴

总而言之,我想获得 3 个不同的数据帧(每个名称 1 个),然后能够应用一个循环(我已经编程过)。我想将循环“自动化”到每个系列。我希望它很清楚...

任何的想法?

非常感谢。

4

1 回答 1

0

在我看来,你们只是cbind把事情放在一起。这将非常简单,每个子集都将是它自己的列表元素(但如果您需要在编程上更健壮的东西,还有很多其他方法可以做到这一点):

lapply( 2:ncol(varA) , function(x) cbind( Year = varA[,1] , A = varA[ , x], B = varB[,x] ) )
[[1]]
     Year  A  B
[1,] 2002 39 56
[2,] 2003 37 72
[3,] 2004 51 32
[4,] 2005 70 33
[5,] 2006 41 47
[6,] 2007 43 19

[[2]]
     Year  A  B
[1,] 2002 56 18
[2,] 2003 31 52
[3,] 2004 58 30
[4,] 2005 59 34
[5,] 2006 43 46
[6,] 2007 31 32

[[3]]
     Year  A  B
[1,] 2002 31 24
[2,] 2003 52 59
[3,] 2004 51 33
[4,] 2005 68 51
[5,] 2006 37 19
[6,] 2007 53 25
于 2013-08-06T13:50:31.677 回答