1

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

下面的代码可用于在 R 中创建示例信号对象。在示例中,对于 A 列,将从channelNo13的值中减去背景值 4 。同样,对于 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'
4

1 回答 1

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,], "-")
于 2012-05-27T00:56:40.397 回答