【发布时间】:2018-05-21 18:57:24
【问题描述】:
我正在尝试找出年度横截面相关性的时间序列平均值。
在tidyverse 之前,我会:
- 将
dat转换为年度数据框列表 - 使用
lapply()查找年度横截面相关性 - 使用
Reduce()手动查找方法
这个逻辑有效,但不是tidy。
set.seed(2001)
dat <- data.frame(year = rep(2001:2003, each = 10),
x = runif(3*10))
dat <- transform(dat, y = 5*x + runif(3*10))
dat_list <- split(dat[c('x', 'y')], dat$year)
dat_list2 <- lapply(dat_list, cor)
dat2 <- Reduce('+', dat_list2) / length(dat_list2)
dat2
## x y
## x 1.0000000 0.9772068
## y 0.9772068 1.0000000
对于tidyerse 解决方案,我最好的(也是失败的)尝试是:
-
group_by()year变量 - 每年使用
do()和cor() - 使用
map()和mean()查找元素均值
此逻辑失败并返回NULL。
library(tidyverse)
dat2 <- dat %>%
group_by(year) %>%
do(cormat = cor(.$x, .$y)) %>%
map(.$cormat, mean)
dat2
## $year
## NULL
##
## $cormat
## NULL
上面我的非tidyverse 解决方案中是否有tidyverse 成语替换Reduce() 成语?
【问题讨论】: