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

从数据框中的所有值中减去特定行的列特定值,单位为R,r,matrix,subtraction,R,Matrix,Subtraction,我在R中有一个数据对象信号,有40000多行(命名变量)的数值和200多列(样本)。对于每列的每一行,我想减去该列名为background的行的值 下面的代码可用于在R中创建示例信号对象。在示例中,对于A列,将从channelNo1到3的值中减去背景值4。同样,对于B列,要减去6的值。等等在R中实现这一点的最简单方法是什么 text <- textConnection(' A B C channelNo1 12 22 32 channelNo2 1

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

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

textR矩阵中的元素按列定向(签出
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,], "-")

试着提供一个小例子,其他人可以用它来证明答案。只是一个注释,但就R的大部分而言,你的数据是前后颠倒的。行是样本/观察值,列是变量。你的两个建议都很有效。谢谢你,也请你指出我在示例代码中的错误。我已经删除了它。