我正在使用R。
这些是我的数据:


Prot_before:具有70000行的矩阵,每行有两列:
组(有700个组)和每个样本的值(有120个
样本)。
Prot_healthy:具有30000行的矩阵,每行有两列:
组(有700个组)和每个样本的价值(有45个
样本)。


对于prot_before中的每一行,我想找到它的值减去prot_healthy中该组中所有样本的值。

例如:

set.seed(100)
Prot_before <- data.frame(cat = c(rep("aaa", 5), rep("bbb", 5), rep("ccc", 5)), val = runif(15))
Prot_before <- df[order(df$cat, df$val), ]
Prot_before


set.seed(100)
Prot_after <- data.frame(cat = c(rep("aaa", 5), rep("bbb", 5), rep("ccc", 5)), val = runif(15))
Prot_after <- df[order(df$cat, df$val), ]
Prot_after


现在,我希望prot_before中的每一行的结果都减去同一组aaa等中的所有样本,在prot_after中。因此,对于prot_before中的每一行,我得到45个结果。
我尝试使用扫描,但不知道如何按组对所有样本重复该功能。

很抱歉,如果写的不正确,我经验不足。
谢谢!

最佳答案

一种选择是将每个数据集的“ cat”按“ split”放入list,然后使用“ outer”使用list对相应的“ cc”元素的所有组合行进行减法。

Map(outer, MoreArgs = list(FUN = `-`),
    split(Prot_before$val, Prot_before$cat), split(Prot_after$val, Prot_after$cat))


或使用Mapsapply

Map(function(x, y) sapply(x, `-`, y),
   split(Prot_before$val, Prot_before$cat), split(Prot_after$val, Prot_after$cat))

10-08 00:29