如何将每个值除以列表对象中每个元素的最大值

How to divide every value with the maximum value in each element in list object

我有xts格式的数据。数据包括对 650 只股票的 360 次月度观察。我将数据分散到年份中,这导致了一个包含 30 个元素(每年 1 个)的大型列表对象。现在,对于列表中每个元素中的每个股票值,我想将该值除以当年的最大值,即我在 tata motor 中有一只股票,我想将其 2005 年的每个值除以 2005 年的最大值.我正在复制以下代码。我把数据分成几年。但无法进一步做。

library(xts)
library(zoo)
library(PerformanceAnalytics)
## splitting the data into years
managers_years<-split(managers,f="years")

对于每个对象,将其转换为 data.frame。对所有列应用转换并将其转换回 zoo.

  • map 对所有对象应用一个函数。
  • fortify.zoozoo 对象转换为具有 Index 列的 data.frame
  • mutate_at 在多个列上应用一个函数。
  • read.zoodata.frame 转换回 zoo
map(
  managers_years,
  function(df) {
    df %>%
    fortify.zoo() %>%
    mutate_at(vars(-Index), ~. / max(., na.rm = TRUE)) %>%
    read.zoo()
  }
)

mutate_at 可以替换为更新的 across 语法。

map(
  managers_years,
  function(df) {
    df %>%
      fortify.zoo() %>%
      mutate(across(-Index, ~. / max(., na.rm = TRUE))) %>%
      read.zoo()
  }
)

不转换成data frame也可以解决这个问题。在应用家庭功能的帮助下,可以解决这个问题。试试下面的代码

test<-lapply(managers_years,apply,2,function(x)x/max(x))