我有一堆与唯一值相关联的方法。唯一值是我在两个不同基板上测试的线。在R中我想构建一个循环,该循环将采用唯一值并将基板A的平均值(pheno_output)除以基板B.并将其吐入新的矢量。
这就是我正在做的事情。
tmpmeans<- rep(NA, 2);
for (i in unique(SplitnonMEANs$Line)){
tmpmeans<- SplitnonMEANs$pheno_output[i]/SplitnonMEANs$pheno_output[i]
}
示例数据:
s;
Line phenotype FoodSource pheno_output
1 non A 123
2 non A 456
1 non B 789
2 non B 159
任何人都可以帮我这么做吗?
答案 0 :(得分:1)
如果每组只有两个值,则可以使用其中任何一个
divide <- function(x) {
stopifnot(length(x) == 2L)
x[1L]/x[2L]
}
aggregate(pheno_output ~ Line, df, divide)
# Line pheno_output
# 1 1 0.1558935
# 2 2 2.8679245
with(df, tapply(pheno_output, Line, divide))
# 1 2
# 0.1558935 2.8679245
sapply(split(df$pheno_output, df$Line), divide)
# 1 2
# 0.1558935 2.8679245
答案 1 :(得分:0)
使用data.table
会更快
library(data.table)
setDT(df)[,list(pheno_output=ifelse(.N==2, pheno_output[1]/pheno_output[2], NA_real_)), by=Line]
# Line pheno_output
#1: 1 0.1558935
# 2: 2 2.8679245