关于在矩阵中计算均值并将其转换为 R 中的数据框的问题

Posted

技术标签:

【中文标题】关于在矩阵中计算均值并将其转换为 R 中的数据框的问题【英文标题】:Problem about calculating mean in matrix, and convert it into a data frame in R 【发布时间】:2022-01-03 22:28:18 【问题描述】:
#size of 10 
sd1<-matrix(0,nrow=10,ncol=100)
for (i in 1:100)
  sd1[,i]<-rnorm(10, 0, 1) 


x1<-apply(sd1,MARGIN=2,FUN=mean)
x10<-mean(x1)
cat('x10=',x10)

Size of 100
sd2<-matrix(0,nrow=100,ncol=100)
for (i in 1:100)
  sd2[,i]<-rnorm(100)

x2<-apply(sd2,MARGIN=2,FUN=mean)
x100<-mean(x2)
cat('x100=',x100)

您好,我创建了两个矩阵,其中包含来自标准正态分布的 100 个大小为 10 的样本和 100 个大小为 100 的样本的每个样本。我想将它们转移到数据框中并计算每个样本的平均值。

我尝试使用 as.data.frame 直接转换矩阵,但我在数据框中得到了不同的行/列数。所以我想知道如何将矩阵转换为数据框并计算矩阵或数据框中每个样本的平均值。

s1<-as.data.frame(t(sd1))

非常感谢!

【问题讨论】:

【参考方案1】:

您是否正在寻找每个矩阵行作为数据框中的一列?那么数据框将是 10 列和每列 100 个观察值?

这不是最有效的方法,但您可以在 tibble() 函数中构建矩阵。然后您可以使用 summary() 获取所有列的描述性统计信息。

library(tidyverse)

df <-
tibble(
  sample1 = sd1[1,],
  sample2 = sd1[2],
  sample3 = sd1[3],
  sample4 = sd1[4],
  sample5 = sd1[5],
  sample6 = sd1[6],
  sample7 = sd1[7],
  sample8 = sd1[8],
  sample9 = sd1[9],
  sample10 = sd1[10]
) 

summary(df)

另一种获取方法是使用 pivot_longer() 和 summarise(),如下所示

df %>% 
  pivot_longer(
    cols = c(1:10),
    names_to = "sample_type",
    values_to = "values"
  ) %>% 
  group_by(sample_type) %>% 
  summarize(sample_means = mean(values))

【讨论】:

以上是关于关于在矩阵中计算均值并将其转换为 R 中的数据框的问题的主要内容,如果未能解决你的问题,请参考以下文章

对数据进行去均值并转换为 numpy 数组

将矩阵值计算为 R 中列表中所有成对比较的平均值

R语言(数值列表矩阵)上应用函数(sqrtroundmeanlog)将矩阵所有数据求对数就矩阵整体的均值使用apply函数计算矩阵matrix的行均值列均值trim设置返回结果精度

R语言(数值列表矩阵)上应用函数(sqrtroundmeanlog)将矩阵所有数据求对数就矩阵整体的均值使用apply函数计算矩阵matrix的行均值列均值trim设置返回结果精度

计算 R 中矩阵每一列的平均值

R语言实战——1.5高级数据管理