Как разделить каждое значение с максимальным значением в каждом элементе в объекте списка

У меня есть данные в формате xts. Данные состоят из 360 ежемесячных наблюдений за 650 запасами. Я разбил данные по годам, в результате чего получился большой объект списка с 30 элементами (по 1 на каждый год). Теперь для каждого значения запаса в каждом элементе списка я хочу разделить значение на максимальное значение в году, т.е. у меня есть запас в моторе tata, я хочу разделить его каждое значение 2005 года на максимальное значение в 2005 году. , Я копирую этот следующий код. Я разделил данные на годы. Но дальше не в силах.

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

person sim235    schedule 01.10.2020    source источник


Ответы (2)


Проблема также может быть решена без преобразования во фрейм данных. С помощью прикладных семейных функций можно решить эту проблему. Попробуйте следующий код

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

person simar    schedule 01.10.2020

Для каждого объекта преобразуйте его в data.frame. Примените преобразование ко всем столбцам и преобразуйте его обратно в zoo.

  • map применяет функцию ко всем объектам.
  • fortify.zoo преобразует объект zoo в объект data.frame со столбцом Index.
  • 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()
  }
)
person Paul    schedule 01.10.2020