我有4个数据框,其中包含日期列,价格列和返回列.
data.1:
Date Price Return
2009-01-02 100 0.2
2009-01-03 110 0.1
etc.
Run Code Online (Sandbox Code Playgroud)
data.2:
Date Price Return
2009-02-02 60 0.15
2009-02-03 50 -0.1
etc.
Run Code Online (Sandbox Code Playgroud)
我想设置一个循环并将函数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))}
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用.有人可以给我一些帮助吗?
在此先感谢 - Dani
Jor*_*eys 12
首先,如果要进行手动分配,则应初始化密度.
densities <- list()
Run Code Online (Sandbox Code Playgroud)
其次,您以有趣的方式使用密度函数.您应该在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)})
Run Code Online (Sandbox Code Playgroud)
这会自动返回一个列表.
要从中获取数据,只需使用列表索引:
densities[[1]]$x
Run Code Online (Sandbox Code Playgroud)
如果您之前命名了您的列表,您也可以使用这些名称:
names(ff) <- c("data.1","data.2")
densities <- lapply(ff,function(i) {density(i$X2)})
densities[['data.1']]$x
Run Code Online (Sandbox Code Playgroud)