【发布时间】:2018-07-25 18:18:26
【问题描述】:
我想知道如何创建一个函数来从 A02、A03 等列中减去 A01 列中的值。
示例数据框:
A01 A02 A03 A04 A05 (...)
1 158 297 326 354 357
2 252 131 341 424 244
3 ...
4 ...
例如,我可以手动减去每一列:
sampledata[1]-sampledata[1]
sampledata[2]-sampledata[1]
sampledata[3]-sampledata[1]
sampledata[4]-sampledata[1] ... etc.
但是如何为每一列做一个很好的计算呢?结果我想有这个:
A01 A02 A03 A04 A05 (...)
1 0 139 168 196 199
2 0 -121 89 171 -8
3 ...
4 ...
减法后,如果某个值是负数,那么我想将它转换为零。
我认为我的问题很容易解决,但我是 R 的新手。
【问题讨论】:
-
欢迎来到 SO!你试过
sweep()这个功能吗?x <- matrix(1:12, 3); sweep(x, 1, STATS = x[,1]) -
或者只是
sampledata - sampledata[[1]]。它将按列回收。 -
或
(sampledata - sampledata[,1]) * (sampledata > sampledata[,1])将负数转换为零 -
谢谢@jogo,这个功能我没试过,但是看起来很有帮助。
-
目前最简单最好的解决方案是@mt1022建议的,谢谢!