【发布时间】:2021-05-18 00:14:53
【问题描述】:
我在 R 中使用了两个密切相关的公式。我想知道是否可以结合 B1 和 B2 来获得我的所需的矩阵输出,如下所示?
z <- "group y1 y2
1 1 2 3
2 1 3 4
3 1 5 4
4 1 2 5
5 2 4 8
6 2 5 6
7 2 6 7
8 3 7 6
9 3 8 7
10 3 10 8
11 3 9 5
12 3 7 6"
dat <- read.table(text = z, header = T)
(B1 = Reduce("+", group_split(dat, group, .keep = FALSE) %>%
map(~ nrow(.)*(colMeans(.)-colMeans(dat[-1]))^2)))
# y1 y2
#61.86667 19.05000
(B2 = Reduce("+",group_split(dat, group, .keep = FALSE) %>%
map(~ nrow(.)*prod(colMeans(.)-colMeans(dat[-1])))))
# 24.4
想要的矩阵输出:
matrix(c(61.87,24.40,24.40,19.05),2)
# [,1] [,2]
#[1,] 61.87 24.40
#[2,] 24.40 19.05
【问题讨论】:
-
这两个操作几乎相同。因此,您可以进行单个分组并获得输出。请检查以下解决方案。
标签: r dataframe matrix dplyr tidyverse