相当于 tidyverse 生态系统中的 ave()
equivalent of ave() in tidyverse ecosystem
我想知道在我下面的代码中 library(tidyverse)
中的 cov(sapply(dat[-1], ave, dat[1]))
是什么?
library(tidyverse)
(T1 = matrix(c(2,3,5,2, 3,4,4,5),4,2) )
colnames(T1) <- c("y1", "y2")
(T2 = matrix(c(4:6, 8,6,7),3,2) )
colnames(T2) <- colnames(T1)
(T3 = matrix(c(7,8,10,9,7, 6,7,8,5,6),5,2) )
colnames(T3) <- colnames(T1)
(dat <- map_df(list(T1,T2,T3), as_tibble, .id = 'group'))
cov(sapply(dat[-1], ave, dat[1])) # equivalent of this in tidyverse
# y1 y2
#y1 5.624242 2.218182
#y2 2.218182 1.731818
一个选项可以是:
dat %>%
group_by(across(1)) %>%
mutate(across(everything(), mean)) %>%
ungroup() %>%
select(-1) %>%
cov()
y1 y2
y1 5.624242 2.218182
y2 2.218182 1.731818
我们可以在 map
中使用 ave
,用 _dfc
转换为 data.frame 即。按列绑定,然后应用 cov
library(purrr)
library(dplyr)
map_dfc(dat[-1], ave, dat[1]) %>%
cov
# y1 y2
# y1 5.624242 2.218182
# y2 2.218182 1.731818
或者 mutate_all
的选项
dat %>%
group_by(group) %>%
mutate_all(mean) %>%
ungroup %>%
select(-group) %>%
cov
关于应用的更新评论 reduce
dat %>%
group_by(group) %>%
summarise(new = list(cov(cur_data()) * (n() - 1)),
.groups = 'drop') %>%
pull(new) %>%
reduce(`+`)
# y1 y2
#y1 14.8 1.6
#y2 1.6 9.2
我想知道在我下面的代码中 library(tidyverse)
中的 cov(sapply(dat[-1], ave, dat[1]))
是什么?
library(tidyverse)
(T1 = matrix(c(2,3,5,2, 3,4,4,5),4,2) )
colnames(T1) <- c("y1", "y2")
(T2 = matrix(c(4:6, 8,6,7),3,2) )
colnames(T2) <- colnames(T1)
(T3 = matrix(c(7,8,10,9,7, 6,7,8,5,6),5,2) )
colnames(T3) <- colnames(T1)
(dat <- map_df(list(T1,T2,T3), as_tibble, .id = 'group'))
cov(sapply(dat[-1], ave, dat[1])) # equivalent of this in tidyverse
# y1 y2
#y1 5.624242 2.218182
#y2 2.218182 1.731818
一个选项可以是:
dat %>%
group_by(across(1)) %>%
mutate(across(everything(), mean)) %>%
ungroup() %>%
select(-1) %>%
cov()
y1 y2
y1 5.624242 2.218182
y2 2.218182 1.731818
我们可以在 map
中使用 ave
,用 _dfc
转换为 data.frame 即。按列绑定,然后应用 cov
library(purrr)
library(dplyr)
map_dfc(dat[-1], ave, dat[1]) %>%
cov
# y1 y2
# y1 5.624242 2.218182
# y2 2.218182 1.731818
或者 mutate_all
dat %>%
group_by(group) %>%
mutate_all(mean) %>%
ungroup %>%
select(-group) %>%
cov
关于应用的更新评论 reduce
dat %>%
group_by(group) %>%
summarise(new = list(cov(cur_data()) * (n() - 1)),
.groups = 'drop') %>%
pull(new) %>%
reduce(`+`)
# y1 y2
#y1 14.8 1.6
#y2 1.6 9.2