我正在使用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))
或使用
Map
和sapply
Map(function(x, y) sapply(x, `-`, y),
split(Prot_before$val, Prot_before$cat), split(Prot_after$val, Prot_after$cat))