【问题标题】:Subtract column-specific value for a particular row from all values in data frame, in R从数据框中的所有值中减去特定行的列特定值,在 R
【发布时间】:2012-05-26 04:02:18
【问题描述】:

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

下面的代码可用于在 R 中创建一个示例 signal 对象。在该示例中,对于 A 列,将从中减去 4 的 backgroundchannelNo13 的值。同样,对于 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'

【问题讨论】:

  • 尝试提供一个小的reproducible 示例,其他人可以用它来演示答案。
  • 只是一个注释,但就 R 的大部分内容而言,您将数据从头到尾。行是样本/观察,列是变量。

标签: r matrix subtraction


【解决方案1】:

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,], "-")

【讨论】:

  • 您的两个建议都有效。谢谢你,也感谢你指出我在示例代码中的错误。我已经删除了。
猜你喜欢
  • 2020-02-24
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2013-06-29
  • 2013-10-31
  • 2015-07-27
  • 1970-01-01
相关资源
最近更新 更多