2012-07-08 54 views
1

我有數據集充滿這樣的:列名後lapply

tickers <- c("SPY","DIA") 

l_ply(tickers, function(sym) try(getSymbols(sym, from="2012-03-01", 
to=Sys.Date()))) 

ClosePrices <- do.call(merge, lapply(tickers, function(x) Cl(get(x))))

tail(ClosePrices) 

      SPY.Close DIA.Close 
2012-06-29 136.10 128.45 
2012-07-02 136.51 128.36 

rsipx <- do.call(merge, lapply(ClosePrices, FUN=function(ClosePrices) RSI(ClosePrices))) 

    tail(rsipx) 
      SPY.Close DIA.Close 
2012-06-29 58.36391 58.92043 
2012-07-02 59.37153 58.53483 

我解決不了的問題是,當我將一個函數它爲每個輸入生成多個列。在這種情況下ADX產生4個值(DIP DIn爲DX ADX):

adxpx <- do.call(merge, lapply(tickers, FUN=function(tickers) ADX(get(tickers)))) 
tail(adxpx) 
       DIp  DIn  DX  ADX DIp.1 DIn.1  DX.1 ADX.1 
2012-06-29 53.47713 35.90631 19.65780 15.30299 55.14765 36.05527 20.93395 18.20818 
2012-07-02 55.79485 32.58420 26.26262 16.08582 56.67699 33.08770 26.27903 18.78467 

我怎樣才能得到相應的列名,而不是一個數? (DX.DIA而不是DX.1),還是隻選擇$ ADX命名列?

回答

3

只是paste的股票名稱到您傳遞給lapply函數內部的列名:

foo <- function(tickers){ 
    res <- ADX(get(tickers)) 
    colnames(res) <- paste(colnames(res),tickers,sep = ".") 
    res 
} 
adxpx <- do.call(merge, lapply(tickers, FUN=foo)) 

如果你想只有一列,您可以更改功能foo只選擇列。說,通過在res <- res[,4]之類添加一行(在改變列名之前)。

+0

偉大的古蘭!那正是我要找的,謝謝! – 2012-07-09 08:08:46