0

我有一个包含 5 个数据框的列表,如下所示:

mydf <- data.frame(x=c(1:5), y=c(21:25),z=rnorm(1:5), p=rnorm(2:6), f=rnorm(3:7))
mylist <- rep(list(mydf),5)
names(mylist) <-c("2006-01-01","2006-01-02","2006-01-03","2006-01-04","2006-01-05") 

我还有一个 3 步公式和以下代码:

在此处输入图像描述

第 1 步 - 代码如下,需要为同一列的每一行计算。如果 x 是 "z" 、 "f" 或 "p" 的元素,则:

z = x - mean(column))/sd(column)

2 - 使用步骤 1 中的值从 0 重新调整 z 分数

rz = abs(min(z)) + z

3 - 重新调整第 2 步的 RZ 分数,使其介于 0 和 1 之间

mrz = rz/max(rz)

我需要将此公式应用于列“z”、“p”、“f”,仅在 using 、或其他类型的循环objective_col <- colnames(mylist$'2006-01-05'[,3:5])的每个元素中:mylistapplysapplylapply

它可能看起来像:

lapply(mylist, FUN = function(x) .......)

输出应与mydf所有存储在相同的布局和格式mylist2 <- list()

随着我取得更多进展,我将继续更新此内容。我仍在学习如何使用循环和函数。感谢任何可以提供一些输入的人。

4

1 回答 1

2
out <- lapply(mylist, function(x) {
  x[, c("z", "p", "f")] <- apply(x[, c("z", "p", "f")], 2, function(y) {
    y2 <- scale(y)
    return((y2 + abs(min(y2))) / max(y2))    
  })
return(x)
})
于 2015-08-24T23:48:24.570 回答