2016-11-23 108 views
0

我對R來說比較新。我一直試圖通過循環for()參數進行試驗。循環到組數據列

我有一個遵循這種模式的虛擬數據集:

Date EUR HIGH EUR LOW EUR CLOSE JPY CURNCY JPY LOW JPY CLOSE GBP CURNCY GBP CURNCY GBP CURNCY 
8/30/2016 1.12 1.12 1.12 102.56 101.76 102.50 1.31 1.31 1.31 
8/29/2016 1.12 1.12 1.12 102.39 101.84 101.92 1.32 1.32 1.32 
8/28/2016 1.13 1.12 1.12 101.94 100.06 101.84 1.33 1.33 1.33 
8/27/2016 1.13 1.12 1.12 101.94 100.06 101.84 1.33 1.33 1.33 
8/26/2016 1.13 1.12 1.12 101.94 100.06 101.84 1.33 1.33 1.33 
8/25/2016 1.13 1.13 1.13 100.62 100.30 100.53 1.33 1.33 1.33 
8/24/2016 1.13 1.12 1.13 100.61 100.10 100.45 1.33 1.33 1.33 
8/23/2016 1.14 1.13 1.13 100.39 99.94 100.24 1.32 1.32 1.32 
8/22/2016 1.13 1.13 1.13 100.93 100.21 100.33 1.32 1.32 1.32 
8/21/2016 1.14 1.13 1.13 100.46 99.88 100.22 1.32 1.32 1.32 
8/20/2016 1.14 1.13 1.13 100.46 99.88 100.22 1.32 1.32 1.32 
8/19/2016 1.14 1.13 1.13 100.46 99.88 100.22 1.32 1.32 1.32 

由於我必須遵循這個模式組織各種Excel文件(即:低價格,高和關閉),我試圖創建一個函數將三個變量(低,高,關閉)和日期合併到一個表中。這背後的想法是,我希望爲每種貨幣生成一張單獨的表格,以便對每種貨幣單獨進行分析,然後通過所有貨幣循環,如果這樣做合理的話。

那麼理想,我想R鍵生成像表:

Date Euro High Euro Close Euro low 
1/1 1.15  1.13  1.12 
1/2 1.15  1.13  1.12 
1/3 1.15  1.13  1.12 

然後我就具有R做一些基本的分析,然後把它重複該過程的下一個變量(GBP,日元)。我在分組部分有點麻煩。

我的代碼是非常錯誤的(也可能是一個重大的眼中釘),但它可能在指出改進/錯誤有用:

Data.Prep = function(x){ 
for(i in seq(1)) 
{ 
    dates = as.Date(x[,i], format="%m/%d/$Y") 
} 

for(i in seq(2, length(x))) 
{ 
    x[,i] = as.numeric(as.character(x[,i])) 
} 

for(i in seq(2, length(x), 3)) 
{ 
    x1 = x[i:(i-1)] 
} 

} 

X1回報:

GBP.CURNCY JPY.CLOSE 
1  1.3120 102.50 
2  1.3172 101.92 
3  1.3279 101.84 
4  1.3279 101.84 
5  1.3279 101.84 
6  1.3264 100.53 
7  1.3273 100.45 
8  1.3211 100.24 
9  1.3157 100.33 
10  1.3185 100.22 
11  1.3185 100.22 
12  1.3185 100.22 
+0

這裏你不需要循環。你只需要對數據進行子集分析。試試這個'i = grep('EUR',names(x)); x [,c(1,i)]'。 –

+0

如果你不允許列名中有空格,你會有更好的運氣。我猜這是一個製表符分隔的文件,sep ='\ t'將是表讀取的參數。 –

回答

3

你可以這樣做這個,但你應該用哪種貨幣來提供。在這裏,我提供一個貨幣向量,然後檢索列索引。那麼我們可以做一個標準的子設置。

vec=c('EUR', 'JPY', 'GBP') 
i=sapply(vec, function(y) grep(y,names(x)), USE.NAMES = F) 
apply(i,2, function(i) x[c(1,i)]) 
+0

非常感謝你!這工作正是我想要它的工作。再次感謝,我非常感謝你的幫助! – Nikitau

+0

嗨,抱歉再次發佈,但我收到一個錯誤,說dim(X)必須有一個正的長度。我改變了載體以包括所有貨幣的名稱,所以我有vec = c('EUR','JPY','GBP','CHF','AUD','CAD','NZD','SEK ','NOK','CZK','HUF','ILS','PLN','RUB', +'TRY','ZAR','BRL','CLP','COP','MXN ','筆','CNY','IDR','INR','KRW','MYR','SGD','PHP','泰銖')。謝謝! – Nikitau

+0

請分享'dput(X)'。另外爲什麼你在'vec'中創建了'+'。 –