У меня есть некоторые данные, где я использую пакет rsample
для создания скользящего windows (я использую набор данных iris
здесь). Набор данных rolling_iris
содержит несколько списков.
Я хотел бы вычислить min
, max
, mean
и sd
каждого из списков. То есть в split
1 вычислите min
по первым 4 столбцам и т.д. c. Первоначально я делал это путем сопоставления разбиений и использования pivot_longer
для перегруппировки данных, а затем вычисления статистики, наконец, используя pivot_wider
, чтобы вернуть данные в исходную форму. Это довольно медленно.
library(dplyr)
library(purrr)
iris
rolling_iris <- rsample::rolling_origin(iris, initial = 10, assess = 1, cumulative = FALSE, skip = 0)
rolling_iris_statistics <- map(rolling_iris$splits, ~analysis(.x) %>%
pivot_longer(cols = 1:4) %>%
mutate(
min = min(value),
max = max(value),
mean = mean(value),
sd = sd(value)
) %>%
group_by(name) %>%
mutate(rowID = row_number()) %>%
pivot_wider(names_from = name, values_from = value)
)
Я хотел бы отобразить каждый из списков и вычислить приведенную выше статистику. Затем, как только это будет сделано, масштабируйте analysis
с помощью следующей функции.
Scale_Me <- function(x){
(x - min(x)) / (max(x) - min(x))
}
Дополнительно:
rolling_iris_analysis <- map(rolling_iris$splits, ~analysis(.x))
rolling_iris_assessment <- map(rolling_iris$splits, ~assessment(.x))
РЕДАКТИРОВАТЬ:
Мне удалось вычислить следующее ( Я не уверен, что это "быстрее")
analysis <- map(rolling_iris$splits, ~analysis(.x))
map(analysis, ~select(., c(1:4)) %>% as.matrix %>% mean())