我在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'
答案 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,], "-")