按组和变量名称在R数据框中缩放值

bio*_*ian 2 r multiplication apply

我希望将一大组缩放因子应用于数据框,这些因子特定于样本来自的组,特别是样本的每个变量.我试图为这个问题构建一个最小的例子.

缩放因素

Batch A     B
Q     1.01  1.31
R     0.90  1.22
S     1.04  1.09
Run Code Online (Sandbox Code Playgroud)

数据

Batch A     B
Q     23    10
Q     22    11
R     27    12
R     26    13
S     22    14
S     24    15
Run Code Online (Sandbox Code Playgroud)

那么,比方说,批次Q样本1将从23,10到23.23,13.1

我意识到在解决方案中可能会有一个应用,但我正在努力找出从哪里开始.任何帮助非常感谢:-)

scaling_factors_example<-data.frame(Batch=c("Q","R","S"),A=c(1.01,0.9, 1.04), B=c(1.31, 1.22, 1.09))

data_example<-data.frame(Batch=c("Q","Q","R","R","S","S"), A=c(23,22,27,26,22,24), B=c(10,11,12,13,14,15))
Run Code Online (Sandbox Code Playgroud)

Mar*_*ann 5

如果你采用合并方式而不是使用apply系列,它会更容易,我认为(sscaling_factors_example,ddata_example)

m <- merge(d[ ,1, drop=F], s, "Batch")
d[-1] <- m[-1] * d[-1]
d

  Batch     A     B
1     Q 23.23 13.10
2     Q 22.22 14.41
3     R 24.30 14.64
4     R 23.40 15.86
5     S 22.88 15.26
6     S 24.96 16.35
Run Code Online (Sandbox Code Playgroud)

说明

merge为您提供与您的数据大小相同的数据框,其中包含每个条目的相应缩放因子.现在您可以简单地将列相乘.