如何将每个值与列表对象中每个元素中的最大值相除
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.zoo
将 zoo
对象转换为带有 Index
列的 data.frame
。
mutate_at
将一个函数应用于多个列。
read.zoo
将data.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 项一起获得一个新行