是否有任何函数可以将同一数据文件中的所有特征(行)减去特定值(行)?

Are there any functions to subtract all features(rows) to a particular value(row) in the same data file?

我是 R 和 Python 编程的新手,但有一些基础知识。我有一个关于计算的技术问题。我想知道是否有任何函数可以将所有特征(行)减去同一数据列表中的特定值(行)。我想获得 output_value1 如下面的 link 和 post 所示,乘以 (-1) 得到 output_value2。

数据文件link:https://www.dropbox.com/s/m5rsi6ru419f5bf/Template_matrixfile.xlsx?dl=0

如果您需要更多详细信息,请告诉我。

我曾尝试在 MS Excel 中执行相同的操作,这非常繁琐且耗时。

我有许多包含数百行和数百列的大型数据集,在 MS Excel 中手动执行这些操作变得更加复杂。因此,我更愿意编写代码并获得所需的输出。

这里是示例 data:Inputs 是特征和值列,输出是 Output_value1 和 Output_value2 列。

|Feature|   |Value| |Output_value1| |Output_value2|
|Gene_1|    |14.25633934|   |0.80100922|    |-0.80100922|
|Gene_2|    |16.88394578|   |3.42861566|    |-3.42861566|
|Gene_3|    |16.01| |2.55466988|    |-2.55466988|
|Gene_4|    |13.82329514|   |0.36796502|    |-0.36796502|
|Gene_5|    |12.96382949|   |-0.49150063|   |0.49150063|
|Normalizer|    |13.45533012|   |0| |0|


dput(head(Exampledata))
structure(list(Feature = structure(1:6, .Label = c("Gene_1", "Gene_2", 
"Gene_3", "Gene_4", "Gene_5", "Normalizer"), class = "factor"), Value = 
c(14.25633934, 16.88394578, 16.01, 13.82329514, 12.96382949, 
13.45533012), Output_value1 = c(0.80100922, 3.42861566, 2.55466988, 
0.36796502, -0.49150063, 0), Output_value2 = c(-0.80100922, 
-3.42861566, -2.55466988, -0.36796502, 0.49150063, 0)), row.names = c(NA, 6L), class = "data.frame") 

假设您只有一行 Feature == "Normalizer",在 R 中您得到该行的 Value 并从其余行中减去它。

Exampledata$Output_value1 <- Exampledata$Value - 
                             Exampledata$Value[Exampledata$Feature == "Normalizer"]
Exampledata$Output_value2 <- Exampledata$Output_value1 * -1

Exampledata
#     Feature    Value Output_value1 Output_value2
#1     Gene_1 14.25634     0.8010092    -0.8010092
#2     Gene_2 16.88395     3.4286157    -3.4286157
#3     Gene_3 16.01000     2.5546699    -2.5546699
#4     Gene_4 13.82330     0.3679650    -0.3679650
#5     Gene_5 12.96383    -0.4915006     0.4915006
#6 Normalizer 13.45533     0.0000000     0.0000000

编辑

对于多个这样的列,我们可以做

cols <- grep("^Value", names(data))
inds <- which(data$Feature == "Normalizer")

data[paste0("Output", seq_along(cols))] <- data[cols] - data[rep(inds, nrow(data)),cols]
data[paste0("Output_inverted", seq_along(cols))] <- data[grep("Output", names(data))] *  -1

数据

Exampledata <- structure(list(Feature = structure(1:6, .Label = c("Gene_1", 
"Gene_2", "Gene_3", "Gene_4", "Gene_5", "Normalizer"), class = "factor"), 
Value = c(14.25633934, 16.88394578, 16.01, 13.82329514, 12.96382949, 
13.45533012)), row.names = c(NA, 6L), class = "data.frame")