从R中的数据框中的所有值中减去特定行的列特定值

时间:2012-05-26 04:02:18

标签: r matrix subtraction

我在R中有一个数据对象 signal ,其中有40,000多行(命名变量)的数值和200多列(样本)。对于每列的每一行,我想减去该列名为 background 的行的值。

以下代码可用于在R中创建示例 signal 对象。对于示例,对于A列,要从中减去 background 值4 channelNo1 3 的值。类似地,对于列B,要减去6的值。等等。在R中实现这一目标的最简单方法是什么?

text <- textConnection('
             A   B   C
channelNo1  12  22  32
channelNo2  13  21  33
channelNo3  12  21  30
background   4   6   8
')
signal <- read.table(text, header = TRUE)
close(text)

typeof(signal)
# returns 'list'

class(signal)
# returns 'data.frame'

1 个答案:

答案 0 :(得分:2)

R矩阵中的元素按列定向(查看matrix(1:12, nrow=3)并且signal - signal[4,]没有按照您的想法执行 - 请查看B列,其中第二个和第三个值应该相同(等于15)。你可以写

as.data.frame(Map("-", signal, as.vector(signal[4,])))

(我认为这会相对有效)但由于数据看起来似乎是一个矩阵(即一个同质类型的矩形),因此将它作为一个矩阵进行操作会更有意义

m = as.matrix(signal)
sweep(m, 2, m[4,], "-")