每列每 n 行的统计信息

use*_*455 2 r matrix

我想计算每第 n 个(在我的情况下为每 6 个)行(或样本)的均值和标准差。以下函数为我提供了每 6 行的平均值(96 行给了我 16 个平均值)

colMeans(matrix(data.trim$X0, nrow=6))
Run Code Online (Sandbox Code Playgroud)

我想对所有列(总共 1280 个平均值)执行此操作。我尝试运行此功能:

colMeans(matrix(data.trim, nrow=6))
Run Code Online (Sandbox Code Playgroud)

但这根本不起作用,我收到以下错误消息:

colMeans(matrix(data.trim, nrow = 6)) 中的错误:'x' 必须是数字

另外: 警告信息:

在 matrix(data.trim, nrow = 6) 中:数据长度 [80] 不是行数 [6] 的约数或倍数

Mat*_*erg 5

您可以使用以下命令将该函数应用于每一列sapply

sapply(iris[1:4], function(x) colMeans(matrix(x, nrow=6)))
      Sepal.Length Sepal.Width Petal.Length Petal.Width
 [1,]     4.950000    3.383333     1.450000   0.2333333
 [2,]     4.850000    3.316667     1.483333   0.2000000
 [3,]     5.183333    3.633333     1.316667   0.2500000
Run Code Online (Sandbox Code Playgroud)

...

[23,]     6.533333    2.950000     5.583333   1.9333333
[24,]     6.516667    3.033333     5.316667   2.1333333
[25,]     6.383333    3.033333     5.266667   2.1333333
Run Code Online (Sandbox Code Playgroud)

与手动创建前六行的均值进行比较:

colMeans(iris[1:6, 1:4])
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   4.9500000    3.3833333    1.4500000    0.2333333 
Run Code Online (Sandbox Code Playgroud)

您也可以通过aggregate给定适当的by参数来执行此操作:

aggregate(iris[1:4], by=list((seq(nrow(iris))-1) %/% 6), FUN=mean)
   Group.1 Sepal.Length Sepal.Width Petal.Length Petal.Width
1        0     4.950000    3.383333     1.450000   0.2333333
2        1     4.850000    3.316667     1.483333   0.2000000
3        2     5.183333    3.633333     1.316667   0.2500000
Run Code Online (Sandbox Code Playgroud)

...

这通过创建一个向量来识别要平均的组:

(seq(nrow(iris))-1) %/% 6
  [1]  0  0  0  0  0  0  1  1  1  1  1  1  2  2  2  2  2  2  3  3  3  3  3  3  4  4  4  4  4  4  5  5  5  5  5  5  6  6  6  6  6  6  7  7  7  7  7  7  8  8  8  8
 [53]  8  8  9  9  9  9  9  9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 12 12 12 13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 17 17
[105] 17 17 17 17 18 18 18 18 18 18 19 19 19 19 19 19 20 20 20 20 20 20 21 21 21 21 21 21 22 22 22 22 22 22 23 23 23 23 23 23 24 24 24 24 24 24
Run Code Online (Sandbox Code Playgroud)

sapply解决方案返回一个矩阵,而该aggregate解决方案返回一个数据帧,以防万一。