2013-08-06 23 views
1

我目前正在研究由60個時間序列組成的數據庫。我實際上有兩個數據集:每個數據集對應一個特定的變量(A或B)。 請在下面找到(即使我的真正的數據庫包含了60名和51歲)的例子 變量列名(字符)上的循環/ cbind

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.

I值從名稱向量中取下「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]) 
} 

但以下警告來UO: 1:在DATA [I] = cbind(ANNEE,DF.VAR_A [,I],DF.VAR_B [,i]): leombre d'objetsàremplacer n'est pas de multiple ta laille du remplacement

總結起來,我想得到3個不同的數據框(每個名稱1個),然後能夠應用一個循環(我已經編程)。我想要「循環」到每個系列。 我希望很清楚...

任何想法?

非常感謝。

+0

嗨,歡迎SO。由於您在這裏很新,您可能需要閱讀[** about **](http://stackoverflow.com/about)和[** FAQ **](http://stackoverflow.com/faq)網站的各個部分可以幫助您充分利用它。如果答案確實解決了您的問題,您可能需要考慮*將其標記爲接受並/或將其標記爲已接受,以顯示問題已回答,方法是勾選合適答案旁邊的小綠色複選標記。你是**沒有義務這樣做,但它有助於保持網站清潔未解決的問題,並獎勵那些花時間解決問題的人。 –

回答

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