【问题标题】:Calculate mean of colnames and rownames set in matrix in R计算R中矩阵中设置的列名和行名的平均值
【发布时间】:2018-08-04 08:06:51
【问题描述】:

抱歉,如果其他地方有人问过这个问题,但我找不到答案。

我正在尝试使用 colMeans 和 rowMeans 计算我创建的矩阵的平均值。平均值是我想要填充矩阵的值,并使用向量设置行和列

目前我的代码如下所示:

A = matrix(ncol = (14), # number of columns in matrix
       nrow = (10), # number of rows in matrix
       colMeans(A, na.rm = FALSE, dims = colnames(A)),
       rowMeans(A, na.rm = FALSE, dims = rownames(A)),
       byrow = TRUE)
colnames(A) c("2","4","6","8","10","12","14","16","18","20","22","24","26","28")
rownames(A) <- c("10","20","30","40","50","60","70","80","90","100")

A

运行它会返回一个具有 NA 值的矩阵。

预期的输出将是如下所示的矩阵,其中 NA 值被列号和行号的平均值替换。

例如,第一个交点等于 6,即 2+10/2

    2  4  6  8 10 12 14 16 18 20 22 24 26 28
10  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
20  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
30  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
40  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
50  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
60  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
70  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
80  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
90  NA NA NA NA NA NA NA NA NA NA NA NA NA NA
100 NA NA NA NA NA NA NA NA NA NA NA NA NA NA

【问题讨论】:

  • 您的示例令人困惑。请展示一个可重现的小例子和预期的输出。你是说c(colMeans(A, na.rm = FALSE), rowMeans(A, na.rm = TRUE))
  • @akrun 抱歉,是的,我就是这个意思。预期输出将是矩阵中设置的向量值的平均值,如下所示 ' 2 4 6 8 10 12 14 16 18 20 22 24 26 28 10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 20 NA NA NA NA NA NA NA NA NA NA NA NA NA '
  • 请使用“A”更新您的帖子以及预期的输出
  • @akrun 已更新。

标签: r matrix mean


【解决方案1】:

这本质上就是你想要使用outer 函数。请注意,t 会转置矩阵,因此它是您在上面指定的正确方式。它也可能只是 outer(B,A, fn)

A<-seq(2,28,2)
B<-seq(10,100,10)
fn<-function(A,B)(A+B)/2
t(outer(A,B, fn))


      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
 [1,]    6    7    8    9   10   11   12   13   14    15    16    17    18    19
 [2,]   11   12   13   14   15   16   17   18   19    20    21    22    23    24
 [3,]   16   17   18   19   20   21   22   23   24    25    26    27    28    29
 [4,]   21   22   23   24   25   26   27   28   29    30    31    32    33    34
 [5,]   26   27   28   29   30   31   32   33   34    35    36    37    38    39
 [6,]   31   32   33   34   35   36   37   38   39    40    41    42    43    44
 [7,]   36   37   38   39   40   41   42   43   44    45    46    47    48    49
 [8,]   41   42   43   44   45   46   47   48   49    50    51    52    53    54
 [9,]   46   47   48   49   50   51   52   53   54    55    56    57    58    59
[10,]   51   52   53   54   55   56   57   58   59    60    61    62    63    64

【讨论】:

  • 谢谢!这正是我想要的 我将如何更改行名和列名来表示序列?
  • colnames(M)&lt;-A; rownames(M)&lt;-B
猜你喜欢
  • 2014-03-15
  • 2013-01-04
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2013-05-06
  • 1970-01-01
  • 2020-05-23
相关资源
最近更新 更多