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

Posted

技术标签:

【中文标题】如何将每个值与列表对象中每个元素中的最大值相除【英文标题】:How to divide every value with the maximum value in each element in list object 【发布时间】:2021-01-16 18:19:47 【问题描述】:

我有 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")

【问题讨论】:

【参考方案1】:

不转换成数据框也可以解决这个问题。借助应用家庭功能,可以解决此问题。试试下面的代码

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

【讨论】:

【参考方案2】:

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

map 将函数应用于所有对象。 fortify.zoozoo 对象转换为带有 Index 列的 data.framemutate_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()
  
)

【讨论】:

以上是关于如何将每个值与列表对象中每个元素中的最大值相除的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Spark/Scala RDD 合并/加入到 List 中,以便 RDD 中的每个值与每个 List 项一起获得一个新行

Python内置函数——最值与求和

如何在指数级大列表中找到第 k 个最大的元素?

python学习中的一些“坑”

如何将列表中的两个最大元素相加?

Scala:将地图列表与每个键的最大值合并的惯用方法?