簡體   English   中英

將函數應用於每個數據框

[英]Apply a function to each data frame

我有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.

我想設置一個循環並將函數density()應用於每個數據框,返回返回的密度值。

我通過創建一個列表,設置一個循環並使用lapply()來做到這一點,所以

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

但這顯然不起作用。 有人可以給我一些幫助嗎?

在此先感謝 - Dani

首先,如果要進行手動分配,則應初始化密度。

densities <- list()

其次,您以有趣的方式使用密度函數。 您應該在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

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]))

雖然毫無疑問有更好的方法(我的意思是手動分配清單)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM