[英]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.