r - 如何从每一行中减去行均值
问题描述
如果我有这样的矩阵或数据框gene
:
[,1] [,2] [,3] [,4]
[1,] 2 12 4 10
[2,] 3 14 3 9
[3,] 5 15 4 3
[4,] 8 6 12 18
我已经通过以下方式获得了每一行和每一列的平均值:
a <- apply(gene, 1, mean)
b <- apply(gene, 2, mean)
现在我想从每一行中减去行均值并得到这个:
[,1] [,2] [,3] [,4]
[1,] -5 5 -3 3
[2,] -4.25 6.75 -4.25 1.75
[3,] -1.75 8.25 -2.75 -3.75
[4,] -3 -5 1 7
这意味着新矩阵的rowmeans全为0。
我怎样才能得到这个?
解决方案
使用sweep()
:
gene <- matrix(c(2,12,4,10,3,14,3,
9,5,15,4,3,8,6,12,18),
byrow=TRUE,nrow=4)
gene2 <- sweep(gene, MARGIN=1, STATS= rowMeans(gene))
@G5W 建议的减去行意味着有效,但这仅仅是因为 R 的两个基本属性之间的相互作用:(1)在对不等长度的向量进行操作时,将向量自动复制到适当的长度;(2) 矩阵的主要列存储。
推荐阅读
- python - ModuleNotFoundError:没有名为“股票”的模块
- python - 将多个具有相同标题的 CSV 文件合并到不同的组文件中
- javascript - 无法保存连接器配置。请再试一次
- leaflet - 我可以在 Leaflet 中使用客户端坐标进行绘制吗?
- python - Redhat Linux上的argparse python 3.6.11,如何控制程序退出
- qt - QML SplitView 在把手鼠标释放时自动折叠
- javascript - 获取 xml 禁止 403 响应
- python - 如何旋转一列的数据框
- reactjs - eslint 在我的 react 和 webpack 应用程序中不起作用 - npm run lint:fix 问题
- jenkins - 在 Jenkins 中使用用户环境的最佳方式是什么?