2011-01-25 9 views
8

私は、日付列、価格列および戻り列を含む4つのデータフレームを持っています。各データフレームに関数を適用する

data.1:

Date  Price Return 
2009-01-02 100 0.2 
2009-01-03 110 0.1 
etc. 

data.2:

Date  Price Return 
2009-02-02 60 0.15 
2009-02-03 50 -0.1 
etc. 

Iは濃度値を返し、ループを設定し、各データフレームに()関数の密度を適用したいと思い返品のために。 、リストを作成するループを設定し、lapply使用について()これを実行するために通過

I 、そう

> ff <- list(data.1, data.2, data.3, data.4) 
> for(i in 1:length(ff){ 
     density[[i]] <- lapply(ff, density(ff[[i]]$Return))} 

が、これは明らかに動作しません。誰か助けてくれますか?事前に

おかげ - あなたはその手動割り当てを行いたい場合 ダニ

答えて

10

まず、あなたは密度を初期化する必要があります。

densities <- list() 

第2に、密度関数を面白い方法で使用します。あなたはあなたのlapplyで異なる機能を指定する必要があります。カンマの後に関数と余分な引数を与えるか、lapply呼び出しで独自のカスタム関数を構築します。

data.1 <- data.frame(
    X1 = letters[1:10], 
    X2 = 1:10 
) 

data.2 <- data.frame(
    X1 = letters[11:20], 
    X2 = 10:1 
) 

ff <- list(data.1,data.2) 

densities <- lapply(ff,function(i) {density(i$X2)}) 

これは自動的にリストを返します。

あなたは、単にリストのインデックスを使用し、そこからデータを取得するには:あなたが前にあなたのリストの名前

densities[[1]]$x 

場合は、同様の名前を使用することができます。

names(ff) <- c("data.1","data.2") 

densities <- lapply(ff,function(i) {density(i$X2)}) 
densities[['data.1']]$x 
+0

申し訳ありませんがわかりません。その密度は1つの値ですか? – Dani

+0

@Dani:申し訳ありませんが、私の間違い、私は間違って読んで –

+0

問題はありません、ソリューションのおかげで。それはうまく動作します!残りの質問が1つあります。密度()が計算した値にどうすればアクセスできますか?たとえば、私のために計算された密度のx値(戻り値となる)を選択するだけです。濃度[[1]]はdata.1の結果のみを選択します。データの補間されたx値のみを選択する方法はありますか?密度[[1 $ x]]は動作しません... – Dani

3

事lapplyではforループを使う必要がないということです。これは動作するはずです:

data.1=data.2=data.3=data.4=matrix(rnorm(30),ncol=3) 

ff=list(data.1,data.2,data.3,data.4) 

densities=lapply(ff,function(x)density(x[,3])) 

(私はリストの手動割り当てを意味する)これを行うには良い方法は間違いなくありますが。

関連する問題