R 对多个列表进行平均的更有效方法
我有一些数据,我使用R 对多个列表进行平均的更有效方法,r,R,我有一些数据,我使用rsample包创建滚动窗口(我在这里使用iris数据集)。rolling_iris数据集包含许多列表 我想计算每个列表的min、max、mean和sd。也就是说,在split1中,计算前4列的min。我最初是通过在拆分上映射并使用pivot\u longer重新排列数据,然后计算统计数据,最后使用pivot\u wide将数据恢复到原始形式。这相当慢 library(dplyr) library(purrr) iris rolling_iris <- rsample
rsample
包创建滚动窗口(我在这里使用iris
数据集)。rolling_iris
数据集包含许多列表
我想计算每个列表的min
、max
、mean
和sd
。也就是说,在split
1中,计算前4列的min
。我最初是通过在拆分上映射并使用pivot\u longer
重新排列数据,然后计算统计数据,最后使用pivot\u wide
将数据恢复到原始形式。这相当慢
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)
)
其他:
rolling_iris_analysis <- map(rolling_iris$splits, ~analysis(.x))
rolling_iris_assessment <- map(rolling_iris$splits, ~assessment(.x))
将下面的代码子集滚动到每个子数据帧中。因此,rolling\u iris\u dfs
是一个数据帧列表。然后,您可以迭代每个数据帧并计算统计数据
rolling_iris_dfs <- map(seq(1, length(rolling_iris[[1]])), ~rolling_iris[[1]][[.x]]$data)
rolling_iris_stats <- map(rolling_iris_dfs, ~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)
)
rolling\u iris\u dfs%
变异(
最小值=最小值,
最大值=最大值,
平均值=平均值(值),
sd=sd(值)
) %>%
分组单位(名称)%>%
变异(rowID=row_number())%>%
枢轴(名称从=名称,值从=值)
)
analysis <- map(rolling_iris$splits, ~analysis(.x))
map(analysis, ~select(., c(1:4)) %>% as.matrix %>% mean())
rolling_iris_dfs <- map(seq(1, length(rolling_iris[[1]])), ~rolling_iris[[1]][[.x]]$data)
rolling_iris_stats <- map(rolling_iris_dfs, ~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)
)